0

在我的应用程序中,用户设置了一些提醒,我必须在时间到时提醒他们。目前我正在AlarmManager.RTC使用AlarmManager

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

它按照指示工作

// 设置闹钟 - 请注意,如果手机关机,此闹钟将丢失
// 关机再开机

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

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

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

4

4 回答 4

4

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

第 1 步:通过某种方式自己跟踪遗漏的内容,例如通过跟踪数据库中的事件状态。

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

于 2014-07-06T14:30:51.603 回答
4

您必须手动执行此操作。

一种方法是监听电话关机事件:

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

并在设备关机前保存关机时间。

然后监听设备启动:

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

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

于 2014-07-06T14:31:14.337 回答
1

AlarmManager 将提醒您所有的警报,直到您的手机开机。

已注册的闹钟在设备处于睡眠状态时会保留(如果在此期间它们响起,可以选择唤醒设备),但如果关闭并重新启动,则会被清除。

现在唯一合适的方法是通过数据库保持跟踪。放置一个扩展BroadcastReceiver的附加类。在其OnReceive()方法中,您可以在设备重新启动时重新生成警报。(显然,如果你有一些跟踪,即数据库)。可以在这里看到为您的目的设置 BroadcastReceiver如何在启动时启动应用程序?. 希望这可以帮助。

于 2014-07-12T03:23:41.790 回答
0

在您的 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..
   }
}
于 2019-02-19T07:42:24.310 回答