Частота обновлений местоположения снижается при фоновом отслеживании местоположения и FusedLocationApi.

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);
    } 
}

Любая помощь приветствуется.


person Wouter    schedule 20.04.2015    source источник
comment
ваша проблема в том, что запрос местоположения увеличивается или уменьшается? В заголовке пишешь убавления, в тексте увеличения..   -  person Renetik    schedule 31.10.2018


Ответы (2)


Это может быть связано с тем, что какое-то другое приложение на устройстве должно запрашивать более частые обновления. Перейдите по этой ссылке. Больше подробностей

Этот интервал неточен. Вы можете вообще не получать обновления (если нет доступных источников местоположения) или получать их медленнее, чем требуется. Вы также можете получить их быстрее, чем запрошено (если другие приложения запрашивают местоположение с более быстрым интервалом). Самая быстрая скорость, с которой вы будете получать обновления, может контролироваться с помощью setFastestInterval(long)

person Shiv    schedule 15.08.2015

У меня тоже такая же проблема, но, как сказал @Shiv, вы должны тестировать разные параметры:

 mClient.requestLocationUpdates(LocationRequest.create(), mLocationIntent)

попробуй это:

 mClient.requestLocationUpdates(createLocationRequest(), mLocationIntent)

private LocationRequest createLocationRequest() {
    LocationRequest locationRequest = new LocationRequest();
    locationRequest.setInterval(UPDATE_INTERVAL);
    locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL);
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setMaxWaitTime(MAX_WAIT_TIME);
    return locationRequest;
}
person GuilhE    schedule 28.06.2017