Как я могу избежать оптимизации батареи устройств Samsung? (S6, S7 и S8)
У меня есть приложение Android для отслеживания GPS, которое получает непрерывные push-сообщения, когда кому-то требуется позиция пользователя.
Каждый раз, когда я получаю push, я запускаю службу определения местоположения, которая отправляет позиции в течение X времени, пока он получает push-сообщения.
Проблема началась с системы Android Doze, которая блокирует запросы HTTP. Я мог получать сообщения, но никогда не мог отправить свою текущую позицию (я получил тайм-ауты http-подключений и ошибки в ping в Google). Но я мог решить эту проблему с помощью запроса ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS и программного добавления приложения в белый список батарей.
Теперь приложение отлично работает на всех устройствах, кроме устройств Samsung с S6, которые имеют систему "Smart manager". Я попытался вручную добавить приложение в белый список аккумуляторов Samsung (Настройки -> Обслуживание устройства -> Аккумулятор -> Приложения без контроля), но проблема не устранена.
Если я через некоторое время держу устройство с выключенным экраном и без зарядки, он перестает отправлять позиции, но он все равно получает push-сообщения.
Может кто-нибудь помочь мне с волшебным решением? Я видел предполагаемый "список пакетов" со множеством приложений, которые Samsung автоматически включает в белый список (например, Facebook, Whatsapp, Life360), но я не смог найти то, что мне нужно сделать, чтобы автоматически добавить свое приложение в этот список.
1 ответ
Исходя из ссылки, предоставленной @ManmeetP, похоже, что вы можете использовать только SDK от Samsung "Knox": ApplicationPolicy.addPackageToBatteryOptimizationWhiteList()
Это будет означать включение этого SDK в ваше приложение для всех ваших пользователей =(