Android Gps Tracker не получает своевременных обновлений

У меня есть приложение для отслеживания GPS с открытым исходным кодом, которое существует уже много лет. В последнее время я получаю жалобы на то, что в Android Nougat вместо получения обновлений раз в минуту люди получают обновления с телефона каждые пять минут, когда телефон отключен от сети. .

Что-то происходит с режимом энергосбережения, хотя мы пытались его отключить.

Есть ли способ заставить телефон получать обновления GPS в указанное время при отключении от сети?

Вот код, если кто-то хочет его увидеть, но я не думаю, что это проблема с кодом. Он был очень стабильным в течение многих лет.

https://github.com/nickfox/GpsTracker/blob/master/phoneClients/android/app/src/main/java/com/websmithing/gpstracker/LocationService.java

Спасибо.


person nickfox    schedule 30.03.2017    source источник


Ответы (1)


Одним из изменений в Android 7/Nougat стало то, что Doze стал «более агрессивным». В Android 6/Marshmallow режим сна срабатывал, когда экран был выключен, устройство работало от батареи и было неподвижно.

(Это задокументировано в разделе Оптимизация для Doze и ожидания приложения)

введите здесь описание изображения

Теперь в Android 7 условия просто выключены и работают от батареи.

(Это задокументировано в изменениях поведения Android 7.0)

введите здесь описание изображения

Приложения могут быть внесены в белый список, чтобы на них не распространялись ограничения, если они нарушают их основные функциональные возможности. В вашем случае они делают так, как GPS-трекер должен записывать координаты в режиме реального времени.

Существует список приемлемых вариантов использования белого списка< /а>

Это включает:

Приложение для автоматизации задач | Основная функция приложения — планирование автоматических действий, таких как обмен мгновенными сообщениями, голосовые вызовы, управление новыми фотографиями или действия с определением местоположения.

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

Это описано в Поддержка других вариантов использования

Цитата:

  • Приложение может активировать намерение ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS, чтобы направить пользователя непосредственно к оптимизации батареи, где он может добавить приложение.

  • Приложение с разрешением REQUEST_IGNORE_BATTERY_OPTIMIZATIONS может вызвать системный диалог, позволяющий пользователю напрямую добавить приложение в белый список, не переходя к настройкам. Приложение запускает намерение ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, чтобы вызвать диалог.

  • При необходимости пользователь может вручную удалить приложения из белого списка.

Последний пункт, конечно, важен, но, к счастью, статус белого списка можно проверить программно:

Приложение может проверить, находится ли оно в настоящее время в белом списке исключений, вызвав isIgnoringBatteryOptimizations().

Таким образом, работа с режимом Doze — это, по крайней мере, одна вещь, которую нужно изучить.

Другая проблема заключается в том, чтобы служба работала в целом. Но служба, которую система убивает, может привести к более случайным временным интервалам. Конечно, есть классические вещи, такие как использование START_STICKY или работает как служба переднего плана.

person Markus Kauppinen    schedule 30.03.2017
comment
Спасибо за отличный ответ. Кодировщик, у которого есть телефон, попробовал это (ниже), строки 53-64, и телефон спросил его, хочет ли он добавить приложение в белый список. Он выбрал да, но время GPS не изменилось. gist.github.com/anonymous/817189e74f85e732f59bf1488e1c5927 - person nickfox; 30.03.2017