У меня есть служба, которая должна продлить тайм-аут экрана системы, когда что-то происходит в сервисе (взаимодействие с пользователем отсутствует) В идеале, я мог бы просто сбросить «активность пользователя» таймер "с помощью метода userActivity PowerManager (long when, boolean noChangeLights). Однако для этого требуется разрешение только для системных приложений.Проблемы с выпуском wakelock с флагом ON_AFTER_RELEASE
Итак, я сделал, чтобы получить wakelock SCREEN_BRIGHT_WAKE_LOCK с флагом ON_AFTER_RELEASE. Согласно документации, с этим флагом «таймер активности пользователя будет сброшен при освобождении WakeLock, в результате чего подсветка будет оставаться немного дольше».
Это работает, но у меня есть некоторые проблемы.
1) Если громкоговоритель освобожден после таймаута по умолчанию, экран больше не тускнеет. Пример: Тайм-аут экрана равен 15 с. Служба хранит wakelock в течение 30 секунд, а затем освобождает его, заставляя экран оставаться на дополнительные 15 секунд. Экран просто выключается через 15 секунд, он не тускнет первым, как обычно.
2) Если громкоговоритель отпущен, когда экран погас, и он погаснет, иногда он мгновенно вспыхивает ярким светом, а затем сразу же затемняется (вместо того, чтобы выходить из тусклого света и светить сразу). Это может произойти во много раз быстрее, вызвав мерцание экрана, если wakelock будет получен и выпущен несколько тимов в течение периода затемнения.
Как я могу достичь того, что я действительно хочу, чтобы сбросить «таймер активности пользователя», как если бы пользователь коснулся устройства?