Плавный провайдер местоположения - получение высокой точности - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь найти способ повысить точность, полученную от провайдера слияния местоположений Служб Google Play.

Я тестирую приложение, которое использует LocationServices и позволяет пользователю выбирать из набора частот обновления (каждые 30 секунд, каждую минуту, каждые 5 минут, каждые 10 минут). Затем он запрашивает обновления местоположения у объединенного поставщика местоположения с выбранным интервалом с приоритетом PRIORITY_HIGH_ACCURACY.

Это работает, но полученные местоположения кажутся не такими точными, как могли бы быть. Значения точности обычно превышают 10 метров, в то время как стороннее приложение GPS (такое как тест GPS) обычно достигает большей точности, если я подожду достаточно долго.

Документация Android содержит следующее:

Приоритет PRIORITY_HIGH_ACCURACY в сочетании с настройкой разрешения ACCESS_FINE_LOCATION, которую вы определили в манифесте приложения, и интервалом быстрого обновления 5000 миллисекунд (5 секунд) заставляет провайдера объединенного местоположения возвращать обновления местоположения, которые точно соответствуют в нескольких футах. Этот подход подходит для картографических приложений, которые отображают местоположение в режиме реального времени.

Действительно, когда я выбираю очень маленькую частоту (например, 5 секунд или 2 секунды), я замечаю общее улучшение точности получаемых местоположений - они иногда достигают 3-4 метров. Однако, похоже, что выбор большего интервала обновления приводит к снижению точности.

Итак, я думаю о следующей стратегии: запланировать задачу, которая с интервалом, выбранным пользователем: (1) начинает запрашивать обновления местоположения каждые несколько секунд (2 секунды), (2) ждет в течение 20 секунд, затем (3) прекратить запрашивать обновления.

Я пытался использовать Обработчик в сервисе переднего плана для достижения этой цели. Он работает, когда экран включен, но, как только экран выключается, планирование становится, по-видимому, непредсказуемым. Похоже, мне придется прибегнуть к чему-то вроде AlarmManager, чтобы запланировать эту задачу. Этот ответ предлагает аналогичный подход: https://stackoverflow.com/a/26298509/1131904; Я также нашел эту статью, в которой рассматривается аналогичная проблема, связанная с планированием периодических задач с эффективным использованием батареи: https://wangjingke.com/2016/09/23/Multiple-ways-to-schedule-repeated-tasks-in-android

Кто-нибудь еще сталкивался с подобной проблемой? Является ли использование AlarmManager хорошим подходом?

...