Служба переднего плана не получает обновления местоположения в режиме ожидания в Android O

У меня есть служба переднего плана, которая должна получить одно обновление местоположения.

Он запускается определенной трансляцией и при запуске просто выполняет запрос на нашем бэкэнде. Когда он получает другую широковещательную рассылку, он запрашивает обновление местоположения (один раз), выполняет еще один внутренний запрос, а затем останавливается.

Изменить: чтобы уточнить, служба сама выполняет обновления местоположения и внутренние запросы. В этом отношении оно не зависит от основного приложения.

Это хорошо работает на Lollipop и Marshmallow, как когда телефон не спит, так и в режиме Doze. Но по какой-то причине на Android O служба никогда не получает обновления местоположения в режиме ожидания. Сеть работает нормально, так как ее первый запрос проходит в обеих ситуациях. Кроме того, если я разбужу телефон во время работы запроса местоположения, он получит обновление. То же самое, если я помещу его в окно обслуживания.

Android O вводит некоторые ограничения на фоновое местоположение, но упоминаний на странице, поведение приложения на переднем плане (видимое приложение или запущенная служба на переднем плане) должно быть сохранено и похоже на предыдущие версии Android.

Это проблема в предварительной версии для разработчиков или ограничение, которое я пропустил?


person Jukurrpa    schedule 28.06.2017    source источник
comment
Просто чтобы уточнить, выполняется ли запрос сети и запрос на обновление местоположения из службы?   -  person Noel    schedule 03.07.2017
comment
@ Ноэль, да. Это независимо от приложения   -  person Jukurrpa    schedule 03.07.2017


Ответы (1)


Взгляните на пример LocationUpdatesForegroundService: примеры кода для Android O. Что-то не так.

Образец LocationUpdatesForegroundService — показывает, как использовать службу переднего плана для получения обновлений местоположения, когда действия приложения не видны. Для приложений, работающих на Android O (даже для приложений, предназначенных для Android 7.0 (уровень API 24) или ниже), фоновые обновления ограничены несколькими разами в час. Использование службы переднего плана — это способ получать более частые обновления.

Загрузите его на GitHub: Java

person phnmnn    schedule 04.07.2017
comment
Я использовал PendingIntent (остаток того времени, когда моя служба была фоновой), я заменил ее на LocationCallback вместе с Looper службы, как они делают, но это не решило проблему. - person Jukurrpa; 15.07.2017
comment
Я протестировал пример кода, и он не работает (не обновляется местоположение, когда устройство переходит в спящий режим). Любой может заставить doze использовать adb и протестировать его. Команды ADB: adb shell dumpsys battery unplug и adb shell dumpsys deviceidle force-idle - person VishalKale; 07.09.2017
comment
Приложения, в которых запущены службы переднего плана (с соответствующим уведомлением), не ограничены дремотой. - person phnmnn; 07.09.2017
comment
@VishalKale Я сообщил о проблеме здесь: issuetracker.google.com/issues/63937937, похоже, Google признать, что это ошибка, но по какой-то причине присвоить ей низкий приоритет... Подождите и посмотрите:/ - person Jukurrpa; 12.09.2017
comment
@Jukurrpa Спасибо, что сообщили об этом в Google. Пометил, посмотрим, когда исправят. Эта ошибка сохраняется и в M&N. Поскольку мы используем сервисы Google Play FusedLocationProvider, они также могут исправить это для них. - person VishalKale; 12.09.2017