Обновления фонового местоположения с использованием API Google - поставщик надежного местоположения неточный
Я работал и тестировал обновления фона, используя GoogleApiClient
для обновлений на основе Interval и Displacement. При тестировании и анализе в течение нескольких дней я выяснил некоторые изменения в выходе, которых я не ожидал.
-
При использовании setInterval
и setFastestInterval
для обновлений на основе интервала, скажем, я установил Интервал как 15 минут и Самый быстрый интервал как 10 минут, 90% времени я получаю обновления ожидаемого интервала (от 10 до 15 минут). Но иногда я заметил, что обновления занимают гораздо больше времени, чем указанный интервал, например, разница составляет около 30 минут и 60 минут. Любая идея о том, почему разница?
-
При использовании setMinimumDisplacement
для обновлений на основе расстояния, скажем, я установил Смещение как 200 метров, я получаю обновления только в стационарных точках (Пока путешествие по нему не дает обновлений, даже если оно превышает 200 метров), которые составляют 200 метров и выше. Это как обычно работает?
Я использую PendingIntent
тип запросов местоположения для получения обновлений местоположения в BroadcastReceiver
для обновлений местоположения в фоновом режиме.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, pendingIntent);
При тестировании Услуги определения местоположения были ВКЛ и Режим расположения был HIGH_ACCURACY.
Ответы
Ответ 1
Пожалуйста, обратитесь к документации, чтобы получить правильное поведение API LocationRequest.
LocationRequest Документация Api
Из этой документации:
- Приложения не могут указывать точные источники местоположения, такие как GPS, которые используются
LocationClient
. Фактически, система может иметь несколько источников местонахождения (поставщиков) и может свести результаты из нескольких источников в один объект местоположения
- Запросы местоположения от приложений с
ACCESS_COARSE_LOCATION
, а не ACCESS_FINE_LOCATION
будут автоматически уменьшаться до более медленного интервала, а объект местоположения будет запутан, чтобы показывать только грубый уровень точности.
- Все запросы на местоположение считаются подсказками, и вы можете получать более/менее точные адреса и быстрее/медленнее, чем запрашивалось
Для более подробного описания прочитайте полную документацию по ссылке выше.
Надеюсь, что это объяснение поможет вам.
Ответ 2
Я нашел ответ на свой второй вопрос. Документация говорит, что не рекомендуется setMinimumDisplacement
в 0, но это фактический трюк. Он работает, как ожидалось, когда он установлен в 0.
Он работает правильно при наличии двух разных LocationRequest
(на основе интервала и смещения), так что один параметр не влияет на другой.
Служба Foreground Service предпочтительнее для вышеупомянутого сценария, чтобы обновления местоположения не убивались ОС.