2016-03-30 10 views
0

私は移動する際にユーザーの所在地を取得する必要のあるサービスを持っています。私はonStartの内側にonLocationChangedを配置する方法を見つけ出すことができませんでした。ユーザーが移動したときでも呼び出されますか?もしそうでなければ、どうすればonStartで呼び出すことができますか?あなたと仮定するとサービスのonStartに含まれていなくても、onLocationChangedは呼び出されますか?

public class myService extends Service implements LocationListener { 
Double lat; 
Double lng; 

@Override 
public IBinder onBind(Intent arg0) { 
return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
// Let it continue running until it is stopped. 
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 





return START_STICKY; 

} 

@Override 
public void onDestroy() { 
super.onDestroy(); 
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 

} 



@Override 
public void onLocationChanged(Location location) { 

if (MainActivity.location != null) { 


    lat = MainActivity.location.getLatitude(); 

    lng = MainActivity.location.getLongitude(); 


    if (MainActivity.placeArrayList.size() != 0) { 
     for (int i = 0; i < MainActivity.placeArrayList.size(); i++) { 


      Log.e("hello", String.valueOf(Float.parseFloat(MainActivity.latitudeArrayList.get(i)))); 

      MainActivity.destination.setLatitude(Double.parseDouble(MainActivity.latitudeArrayList.get(i))); 
      MainActivity.destination.setLongitude(Double.parseDouble(MainActivity.longitudeArrayList.get(i))); 
      Log.e("distancemeters", String.valueOf(MainActivity.location.distanceTo(MainActivity.destination))); 

      if (MainActivity.location.distanceTo(MainActivity.destination)<100) { 




       AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

       audioManager.setStreamVolume(AudioManager.STREAM_RING, AudioManager.RINGER_MODE_SILENT, AudioManager.FLAG_SHOW_UI); 


      } else { 



      } 

     } 


    } 
} 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 
} 

答えて

0

は、GoogleのFusedLocationProviderApiは、あなたが最初のいくつかのことをする必要が使用している:

  1. の変更をあなたのクラスを
  2. 作成GoogleApiClient.ConnectionCallbacks
  3. GoogleApiClient.OnConnectionFailedListenerあなたGoogleApiオブジェクトを作成し実装するためにあなたのLocationRequestオブジェクト
  4. クラスをLocationListenerとして登録

まず、次のようにクラス定義を変更:

public class myService extends Service implements LocationListener,  
                GoogleApiClient.ConnectionCallbacks, 
                GoogleApiClient.OnConnectionFailedListener { 

を次に、あなたのonStart()方法でこれを置く:あなたは、リスナーの登録を解除したい場合は、

// 2. Create the GoogleApi object 
GoogleApi = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 

// 3. Create the LocationRequest 
mLocationRequest.setInterval(1000); // in milliseconds 
mLocationRequest.setFastestInterval(1000); // in milliseconds 
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

// 4. Register your listener 
LocationServices.FusedLocationApi.requestLocationUpdates(GoogleApi, mLocationRequest, this) 

onDestroy()でこれを置く:

LocationServices.FusedLocationApi.removeLocationUpdates(GoogleApi, this); 

ただし、これを使用するとメソッドとは、ユーザーが移動するときに指定した時間間隔でではなく、の位置更新を取得することを意味します。ユーザーの位置を把握し、「移動」を構成する最小距離を決定する方法を見つける必要があります。また、その場所がユーザーの場所の周りで踊るかもしれないと考える必要がありますので、これも考慮に入れる必要があります。

+0

小さなものが1つありますが、MainActivity.getAppContext()は認識されません。 getAppContext()が – felix

+0

であることはわかりません - 私は自分のプロジェクトのコードを持ち上げました。サービスへの参照、つまり 'this'を渡すだけです。これを反映するために私の答えを編集しました。 – nagyben

関連する問題