Handler.postDelayed не вызывается, когда мобильный телефон находится в режиме ожидания - PullRequest
0 голосов
/ 26 февраля 2011

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

Я использую активность для отображения графического интерфейса. У него есть кнопки для установки времени начала и окончания, а также все остальное, что нужно. Когда пользователь ввел все параметры, они передаются в сервис. Этот сервис использует объект-обработчик для регистрации 2 обратных вызовов (с Handler.postDelayed). Один для начала Mute и один для End Mute (в SetMuteIntervall). Первые тесты, похоже, сработали, но если я попытаюсь отключить звук на 30 минут, он никогда не включается. Я думаю, что это связано с тем, что мобильный телефон находится или находился в режиме ожидания. Я также попытался использовать Handler.postAt (), но это тоже не сработало (и время относительно времени работы было несколько запутанным).

Итак, что я должен сделать, чтобы гарантировать, что мои обратные вызовы вызваны, независимо от того, находится телефон в режиме ожидания или нет?

Вот источник моей программы:

http://pastebin.com/XAgCeAq9

http://pastebin.com/33nepFV5

1 Ответ

1 голос
/ 26 февраля 2011

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

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

...