Android:在设备开启时触发所有错过的警报

问题描述 投票:0回答:4

在我的应用程序中,用户设置了一些提醒,我必须在时间到来时发出警报。目前我正在使用AlarmManager.RTC作为一种AlarmManager

am.set(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent);

它按照指示工作

//设置闹钟 - 请注意,如果拨打电话,此闹钟将会丢失 //再次关闭

当我打开设备时,有什么方法可以触发错过的警报?

请注意,我不想唤醒设备,我只是想在他们打开设备时提醒他们。

PS:我已经阅读了文档http://developer.android.com/reference/android/app/AlarmManager.html#RTC,但我没有找到我的选择。

android alarmmanager power-off
4个回答
4
投票

当我打开设备时,有什么方法可以触发错过的警报?

步骤1:有一些方法可以跟踪自己,错过的内容,例如通过跟踪数据库中的事件状态。

步骤2:设置BOOT_COMPLETED BroadcastReceiver以查找手机重启的时间。在那里,安排任何仍在将来的警报,并决定如何处理过去发生但被错过的警报(例如,引发Notification指出错过的事件)。


4
投票

您必须手动执行此操作。

一种方法是听取手机关机事件:

<action android:name="android.intent.action.ACTION_SHUTDOWN" />

在设备关闭之前,请保存关机时间。

然后监听设备启动:

<action android:name="android.intent.action.BOOT_COMPLETED" />

并编写自己的逻辑,确定在停机期间将触发哪些警报,并使用AlarmManager立即触发这些警报。


1
投票

AlarmManager会在您的手机开启之前报警所有闹钟。

设备处于休眠状态时会保留已注册的警报(如果设备在此期间关闭,则可以选择将设备唤醒),但如果设备关闭并重新启动,则会清除设备。

现在唯一合适的方法就是通过数据库来跟踪。添加一个扩展BroadcastReceiver的附加类。在其OnReceive()方法中,您可以在设备重新启动时重新生成警报。 (显然,如果你有一些轨道,即数据库)。在这里可以看到为您的目的设置BroadcastReceiver How to start an Application on startup?。希望这可以帮助。


0
投票

在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..
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.