Android: запускать все пропущенные тревоги при включении устройства
В моем приложении пользователь установил некоторые напоминания, и я должен предупредить их, когда придет время. В настоящее время я использую AlarmManager.RTC
как тип AlarmManager
am.set(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent);
это в работе в соответствии с инструкцией
// Устанавливает будильник - обратите внимание, что этот будильник будет потерян, если телефон будет включен
// снова и снова
Есть ли способ, которым я могу включить пропущенные сигналы при включении устройства?
Обратите внимание, что я не хочу пробуждать устройство, я просто хотел напомнить им, когда они включают устройство.
PS: я прочитал документацию http://developer.android.com/reference/android/app/AlarmManager.html, но не нашел свой вариант.
3 ответа
Есть ли способ, которым я могу включить пропущенные сигналы при включении устройства?
Шаг № 1: Имейте какой-то способ самостоятельно отслеживать, что пропущено, например, отслеживая состояние события в базе данных.
Шаг № 2: Настройте BOOT_COMPLETED
BroadcastReceiver
чтобы найти, когда телефон перезагрузится. Там запланируйте любые тревоги, которые все еще в будущем, и решите, что делать с тревогами, которые произошли в прошлом, но были пропущены (например, поднять Notification
указывая на пропущенные события).
Вы должны сделать это вручную.
Один из способов сделать это - прослушать событие отключения телефона:
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
и прежде чем устройство выключится, сохраните время выключения.
Затем прослушайте загрузку устройства:
<action android:name="android.intent.action.BOOT_COMPLETED" />
и написать свою собственную логику, которая определяет, какие аварийные сигналы сработали бы во время этого простоя, и немедленно запустить эти аварийные сигналы с AlarmManager.
AlarmManager будет сигнализировать все ваши тревоги, пока ваш телефон не включен.
Зарегистрированные сигналы тревоги сохраняются, пока устройство находится в спящем режиме (и могут при желании пробудить устройство, если они выключаются в течение этого времени), но будут сброшены, если оно выключено и перезагружено.
Теперь этот единственный способ - сохранить треки через базу данных. Поставьте дополнительный класс, который расширяет BroadcastReceiver. Где в его методе OnReceive() вы можете повторно генерировать свои сигналы тревоги при перезагрузке устройства. (очевидно, если у вас есть какой-то трек, то есть база данных). Настройку BroadcastReceiver для вашей цели можно посмотреть здесь. Как запустить приложение при запуске?, Надеюсь это поможет.
Зарегистрируйте broadcastReceiver в своем Manifest.xml
<receiver
android:name=".AlarmRestartReceiver"
android:enabled="true">
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
После этого прослушайте событие, когда устройство проснется.
override fun onReceive(context: Context, intent: Intent?) {
if (intent?.action == "android.intent.action.BOOT_COMPLETED") {
// re-register all alarm here..
}
}