Объект AlarmManager после выключения и включения телефона - PullRequest
6 голосов
/ 08 января 2012

В моем приложении я установил будильник

AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
...
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
...
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);

Работает нормально, если я не выключу и не включу телефон.

Если говорить более конкретно, скажем, в 10:20 я установил будильник на 10:22, а в 10:21 выключил и включил телефон, будильник не сработал.

В чем может быть проблема?Это проблема широковещательной рассылки pendingIntent или я должен установить некоторые флаги объекта alarmManager, чтобы он работал в таких условиях?

1 Ответ

17 голосов
/ 08 января 2012

Документация о AlarmManager гласит, что:

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

Кажется, что AlarmClock, включенный по умолчанию в Android, работает даже после перезагрузки.

Чтобы сохранить работоспособность аварийных сигналов после перезагрузки, необходимо запустить приложение при завершении загрузки и заново настроить все аварийные сигналы с помощью AlarmManager.(На самом деле вы можете просто настроить свои будильники с помощью широковещательной рассылки, а не запускать ваше приложение)

Здесь - это вопрос StackOverflow, касающийся запуска приложения при запуске.

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

...