Проблема с таймером обратного отсчета, связанная с выключением подсветки

#android

#Android

Вопрос:

Я создал таймер, используя CountDownTimer . Кроме того, когда до завершения таймера остается 5 секунд, звуковой сигнал воспроизводится каждую секунду до его завершения (доходит до 0 секунды).

Я тестирую на устройстве Android, где я установил время ожидания экрана равным 15 секундам.

Я обнаружил, что по истечении времени ожидания экрана таймер приостанавливается и не завершается. Кроме того, звук не воспроизводится.

Я использую следующий код для управления питанием / блокировки пробуждения, но это не решает проблему.

 private PowerManager.WakeLock wl;

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SampleScreen");
  

Однако при использовании следующего кода

 wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "SampleScreen");
  

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

Требование заключается в том, что при выключенном экране таймер должен продолжать работать, а также звуковой файл должен воспроизводиться каждую секунду, за 5 секунд до завершения работы таймера.

Пожалуйста, предоставьте свои входные данные / пример кода о том, как обращаться.

Ответ №1:

Вы должны использовать PowerManager.PARTIAL_WAKE_LOCK вместо PowerManager.FULL_WAKE_LOCK

Комментарии:

1. Я использовал этот код .. он приведен в прилагаемом примере исходного кода выше… необходимо прокрутить вправо .. отступ был неправильным

2. Итак, что происходит, когда вы используете частичную блокировку пробуждения? Добавили ли вы инструкции отладки в свою активность?

3. При использовании PowerManager. PARTIAL_WAKE_LOCK, таймер останавливается после истечения времени ожидания экрана мобильного устройства. При использовании инструкций отладки кажется, что компонент Timer не отвечает на параметр PowerManager. PARTIAL_WAKE_LOCK для продолжения работы при истечении времени ожидания экрана.

4. Это странно, можете ли вы опубликовать, где вы снимаете блокировку?

5. @Override protected аннулирует onPause() { super.onPause(); wl.release(); } Я снимаю блокировку, используя приведенный выше код в том же классе Activity. Пожалуйста, сообщите, если мне нужно внести какие-либо изменения.