Как отличить устройство, входящее в окно обслуживания Doze, от выхода из него

У меня есть метод, который периодически запускается, чтобы поддерживать сетевое соединение. В режиме Doze я хотел бы отключить его периодический запуск и запускать ровно один раз во время окна обслуживания. Когда устройство выходит из Doze, я бы хотел, чтобы метод вызывался периодически снова. Как я могу это сделать?

Я зарегистрировал приемник, который прослушивает передачу PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED, а затем вызывает PowerManager.isDeviceIdleMode(). Однако это возвращает false в обоих случаях — во время окна обслуживания и когда устройство выходит из режима ожидания. Как я могу различать их?


person rhari    schedule 12.08.2017    source источник


Ответы (1)


Я столкнулся с той же проблемой, хотя я думаю, что Android должен различать это, отправляя другое состояние в приемник или предоставляя функцию для запроса такого состояния, я не нашел ничего связанного.

помните, что ACTION_DEVICE_IDLE_MODE_CHANGED снова срабатывает при переходе в сон через 9-10 минут.

решение будет:

ТЕКУЩЕЕ СОСТОЯНИЕ УСТРОЙСТВА -> "В ДРЕМНЕ ​​БЕЗ РАБОТЫ"

когда вы получаете ACTION_DEVICE_IDLE_MODE_CHANGED, а isDeviceIdleMode() имеет значение false, ваш статус «подозрение на сонливость» - СДЕЛАЙТЕ работу своего окна обслуживания И установите будильник на 15 минут в будущем.

при следующем изменении режима.

если ACTION_DEVICE_IDLE_MODE_CHANGED срабатывает перед тревогой, а isDeviceIdleMode() имеет значение true, значит, это было окно обслуживания. "выход из дремоты ложный", (отключение будильника).

если тревога срабатывает первой, это означает, что это было подтверждено «вне дремоты».

Время дремоты указано в документах. обязательно проверьте это в первую очередь. (может измениться в будущем, как это уже произошло * может быть, есть константа для получения этого значения - я не знаю).

я считаю это хаком, а не полноценным решением. но это работает до тех пор, пока любая будущая расширенная работа над Android не предоставит еще один вызов ACTION_DEVICE_IDLE_MODE_CHANGED со статусом «вне дремоты».

person guest    schedule 30.08.2017