Обновления местоположения Android застряли

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

Ранее я пользовался "Службой слияния" в Google Play Service, но обновления местоположения не были получены в соответствии с запросом. Обновления местоположения зависли на некоторое время, интервал между обновлениями подскочил до 10 минут или около того. Иногда, даже если я ставлю свой приоритет на "PRIORITY_HIGH_ACCURACY", происходит то же самое.

Затем я вернулся к старому "Менеджеру местоположений", и когда я использовал "NETWORK_PROVIDER", я заметил, что обновления местоположения зависли из-за этого провайдера. Также GPS не активируется сразу, это занимает некоторое время. Я пытаюсь создать свой собственный провайдер локации. Как я могу эффективно переключаться между провайдерами, не задерживаясь при обновлении местоположения.

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

Аккумуляторная батарея не является проблемой для меня прямо сейчас. Мне известны все документы, которые Google предоставляет в отношении доступа к местоположению.

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

Спасибо!

1 ответ

FusedLocationProvider действительно является лучшим вариантом для получения местоположений на данный момент, поскольку он использует намного больше, чем просто данные GPS или сети для получения данных о местоположении. У меня также были проблемы с пропущенными интервалами, но в конечном итоге это зависит от наличия GPS, сети и т. Д. И т. Д.

Мое любимое использование FusedLocationProvider до сих пор связано с классом AlarmManager: По сути, идея состоит в том, чтобы начинать отслеживание местоположения с интервалами, указанными в Alarm Manager (это может быть установлено каждые 30 секунд, как в вашем случае). Как только интервал достигнут, поставщик местоположения должен получить исправление местоположения как можно скорее (поэтому в методе setInterval или как бы он ни вызывался, параметр равен 0). Таким образом, вы можете избежать ожидания еще 30 секунд для нового местоположения, вместо того, чтобы средство отслеживания местоположения попыталось предоставить местоположение как можно скорее после того, как был достигнут интервал, заданный диспетчером тревог.

Кстати, при создании пользовательских оболочек для отслеживания местоположения будьте осторожны с использованием метода.getLastKnownLocation(), поскольку он использует только кэшированные местоположения - вы можете в конечном итоге отправлять одно и то же местоположение пользователю каждые 30 секунд.

Удачи!

Другие вопросы по тегам