Android Oreo, wifiManager.getScanResults () возвращает пустой список в Doze - PullRequest
0 голосов
/ 25 июня 2018

У меня проблемы с wifiManager.getScanResults() возвратом пустого списка в Oreo (API26), когда устройство переходит в режим ожидания. До того, как он входит в Doze, а также в более ранних версиях API все работает нормально (я получаю список ScanResults).

Я очень часто, один раз в минуту, вызываю этот метод в службе переднего плана.

Как мне справиться с поведением этого нового Android?

Любые советы или даже примеры кода приветствуются.

1 Ответ

0 голосов
/ 25 июня 2018

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

Легкая доза начинается через несколько минут после того, как вы оставите свой телефон без зарядки на столе, эта доза ограничит доступ к ряду услуг.

Глубокая дремота сна начинается через 20-30 минут без движения (и все еще не заряжается) и сведет к минимуму использование вашего телефона, он проснется для некоторых уведомлений и звонков.

Режим ожидания отображается только в том случае, если телефон не перемещается, поэтому, когда телефоны перемещаются, он не считается режимом ожидания.

Для вашей проблемы это связано с Android 8, который убивает фоновые сервисы, когда приложение не на переднем плане.

По вашей причине, ваши фоновые службы будут убиты через несколько минут. Служба определения местоположения будет недоступна, поэтому вы не сможете получать обновления Wi-Fi. (Ответ здесь будет таким: не боритесь с режимом дремоты, вы проиграете).

Итак, если вы хотите получать обновления сканирования wifi, когда ваше приложение убито или экран выключен:

  • Использование JobDispatcher для создания задания, которое будет выполняться каждые x секунд, и получения вашего сканирования. JobDispatcher по-прежнему работает в режиме легкой дозы
  • если телефон входит в глубокую дозу, телефон не двигается, и поэтому вы можете сделать вывод, что сканирование будет таким же, и его не нужно будет обновлять, ваша работа возобновится после выхода из режима дозирования.
...