Как функция Doze/Standby влияет на обновление местоположения?
Кто-нибудь знает, может ли приложение с белым списком, содержащее частичную блокировку бодрствования, получать обновления местоположения, пока устройство находится в режиме "Доза" или приложение находится в режиме ожидания?
В документах Android (http://developer.android.com/training/monitoring-device-state/doze-standby.html) указано, что процессор и сеть отложены и не упоминают о влиянии на обновления местоположения (т.е. из LocationManager). Исходя из этого, казалось бы, что на обновление местоположения не влияет Doze/Standby, поэтому, если приложение поддерживает частичную блокировку бодрствования (чтобы поддерживать работу ЦП), приложение должно иметь возможность получать обновления местоположения.
Я реализовал это и протестировал его и обнаружил, что приложение не получает обновления местоположения в Doze, даже если у него есть частичный блокиратор слежения и есть белый список. Интересно, что когда я оставил устройство на своем столе в ночное время, открыв приложение с блокировкой бодрствования, батарея была почти пуста утром, но, повторяя приложение без блокировки, батарея была почти полной утром. Таким образом, похоже, что приложение работало все время, но не получало обновлений местоположения.
Немного дополнительного фона: приложение используется для отслеживания флота, поэтому мы пытаемся выяснить, есть ли в любом случае приложение для работы с фоновым сервисом, который надежно получает обновления местоположения при работе от батареи.
Спасибо!
-Tom B.
Ответы
Ответ 1
Да, это, похоже, еще одно недокументированное ограничение в режиме Doze, так же показывают мои тестовые журналы . Я предполагал, что некоторые аппаратные функции, такие как GPS, обычно отключены в Doze, но, возможно, он отключен в LocationManager.
Поскольку это может быть просто серьезной нехваткой документации, утечка аккумулятора, о которой вы упоминаете, определенно не должна произойти в Doze, так как именно то, что Doze означает для предотвращения в первую очередь.
Вы можете отправить отчет об ошибке обо всем этом на https://code.google.com/p/android/issues/list
Ответ 2
Для получения обновлений местоположения, когда телефон находится в режиме ожидания, приложение должно быть в белом списке, иметь частичную блокировку слежения и также не должно находиться в одной и той же локализации (если вы находитесь в том же месте, где вам не нужны обновления). Я тестировал это с помощью Mock Locations, которое давало поддельное местоположение, когда телефон был на моем столе.
Ответ 3
В моем опыте обновления местоположения по-прежнему поступают в Doze, но только когда вы используете предварительное уведомление вместе с описанными вами методами. Сетевые вызовы не работают.
Помните о некоторых сообщениях stackoverflow, указывающих на использование разрешения REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Ваше приложение будет отклонено из магазина воспроизведения, если вы определите это разрешение в своем манифесте из-за "нарушения устройства и сети" https://play.google.com/about/privacy-security/device-network-abuse/.
Также можно вручную запросить это разрешение с намерением. Я не знаю, было ли это запрещено. Весь принцип "белого списка" немного расплывчато для меня.