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_COMPLETEDBroadcastReceiver чтобы найти, когда телефон перезагрузится. Там запланируйте любые тревоги, которые все еще в будущем, и решите, что делать с тревогами, которые произошли в прошлом, но были пропущены (например, поднять 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..
   }
}
Другие вопросы по тегам