Fuseed Location Provider API сервисов Google Play позволяет запрашивать обновления местоположения с помощью прослушивателей местоположения или ожидающих намерений. Я могу успешно запрашивать обновления местоположения с помощью прослушивателя местоположения, но я изо всех сил пытался воспроизвести то же поведение с ожидающими намерениями. Для последнего я запускаю службу намерений, которая обрабатывает данные о местоположении. Что я заметил во время тестирования, так это то, что обновления местоположения соответствуют интервалу, который я установил в запросе местоположения. Однако с течением времени интервал между обновлениями значительно увеличивается, хотя интервал в запросе местоположения остается постоянным. Я замечал такое поведение несколько раз с несколькими устройствами. Кто-нибудь знает, что может происходить?
Отслеживание местоположения на переднем плане
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);
}
}
Любая помощь приветствуется.