在我的应用程序中,用户设置了一些提醒,我必须在时间到来时发出警报。目前我正在使用AlarmManager.RTC
作为一种AlarmManager
am.set(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent);
它按照指示工作
//设置闹钟 - 请注意,如果拨打电话,此闹钟将会丢失 //再次关闭
当我打开设备时,有什么方法可以触发错过的警报?
请注意,我不想唤醒设备,我只是想在他们打开设备时提醒他们。
PS:我已经阅读了文档http://developer.android.com/reference/android/app/AlarmManager.html#RTC,但我没有找到我的选择。
当我打开设备时,有什么方法可以触发错过的警报?
步骤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 How to start an Application on startup?。希望这可以帮助。
在Manifest.xml中注册broadcastReceiver
<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..
}
}