Google Play Services の Fused Location Provider API を使用すると、ロケーション リスナーまたは保留中のインテントを使用してロケーションの更新をリクエストできます。ロケーション リスナーを使用してロケーションの更新を正常にリクエストできますが、保留中のインテントで同じ動作を再現するのに苦労しています。後者については、位置データを処理するインテント サービスを起動します。テスト中に気付いたのは、ロケーションの更新が、ロケーション リクエストで設定した間隔と一致していることです。ただし、ロケーション要求の間隔が一定のままであっても、時間が経つにつれて、更新の間隔が大幅に増加します。複数のデバイスで何度かこの動作に気付きました。何が起こっているのか誰にも分かりますか?
フォアグラウンド位置追跡
protected void requestLocationUpdates()
{
mIsTracking = true;
LocationRequest locationRequest = mLocationRequests.get(mPreviousDetectedActivity.getType());
if (locationRequest != null)
{
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this);
}
}
@Override
public void onLocationChanged(Location location)
{
Log.i(TAG, "onLocationChanged");
handleLocationChanged(location);
}
バックグラウンドでの位置追跡
protected void requestLocationUpdates()
{
LocationRequest locationRequest = mLocationRequests.get(mPreviousDetectedActivity.getType());
if (locationRequest != null)
{
mResultCallabackMessage = "Request location updates ";
PendingIntent pendingIntent = getLocationPendingIntent();
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,
locationRequest, pendingIntent).setResultCallback(this);
}
}
protected PendingIntent getLocationPendingIntent()
{
if (mLocationPendingIntent != null) return mLocationPendingIntent;
Intent intent = new Intent(this, LocationUpdatesIntentService.class);
mLocationPendingIntent = PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
return mLocationPendingIntent;
}
public class LocationUpdatesIntentService extends IntentService
{
public LocationUpdatesIntentService()
{
// Use the TAG to name the worker thread.
super(TAG);
}
@Override
public void onCreate()
{
super.onCreate();
}
@Override
protected void onHandleIntent(Intent intent)
{
Bundle bundle = intent.getExtras();
Location location = (Location) bundle.get(FusedLocationProviderApi.KEY_LOCATION_CHANGED);
handleLocationUpdates(location);
}
}
どんな助けでも大歓迎です。