FusedLocation Pending Intent иногда вызывается без указания местоположения

У меня есть служба намерений, которая вызывается FusedLocationApi каждую минуту или около того для периодического мониторинга местоположений через pending .

@Override
protected void onHandleIntent(Intent intent) {
        if (intent != null && LocationResult.hasResult(intent)) {

            LocationResult locationResult = LocationResult.extractResult(intent);
            location = locationResult.getLastLocation();

        } else {
            Crashlytics.logException(new LocationException("Loc Intent Service invoked without location", new NullPointerException()));
        }
}

Большую часть времени он работает нормально, но в производственной среде за последние 7 дней я получил 13 000 событий службы, вызываемой FusedLocationApi без указания местоположения. (благодаря нефатальному исключению Crashlytics, которое я добавил)

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


person Ishaan Garg    schedule 14.07.2017    source источник
comment
В любом случае вам никогда не гарантируется получение местоположения, вам всегда нужно проверять, является ли местоположение нулевым или нет.   -  person tyczj    schedule 14.07.2017


Ответы (1)


Согласно документация requestLocationUpdates():

Как LocationResult, так и LocationAvailability отправляются данному PendingIntent. Вы можете извлечь данные из намерения, используя hasResult(Intent), extractResult(Intent), hasLocationAvailability(Intent) и extractLocationAvailability(Intent).

Пока вы проверяете первый случай, вы не обрабатываете (или игнорируете) изменения доступности местоположения.

person ianhanniballake    schedule 19.07.2017