首先,关于如何访问以前创建的警报的小教程:
您可以通过创建具有唯一 ID 的警报来区分警报,例如:
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
当您想要访问此警报时,您必须创建具有相同唯一 ID 的相同 PendingIntent。例如,以下将仅访问您使用 PendingIntent id 1234 创建的警报。然后它将取消前一个并重置它。
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
这个想法很简单。跟踪 id,然后使用它们访问各自的警报。如果您创建多个具有相同 id 的警报,则最近的警报将取消上一个警报。
来到你的主要问题,而不是每次启动应用程序时检查警报是否处于活动状态,只需在 Activity 的onCreate()
方法中重新设置它。与我上面描述的相同的 PendingIntent 。这样可以省去检查警报是否之前设置的所有麻烦。由于您的目标是让警报保持活跃,因此每次启动应用程序时覆盖先前设置的警报不会有什么坏处。只要确保你使用相同的 id 来创建你的 PendingIntent。
不要忘记检查您的闹钟时间是否已经过去,以避免尝试将闹钟设置为过去的时间,这将立即触发它。
让我们考虑另一种情况:当您关闭设备时,您的所有闹钟都将被取消。这使您别无选择,只能在重新启动时再次设置它们。为此,您必须使用BroadcastReceiver。
这个答案将帮助你如何做到这一点。只需按照上面的建议在 BroadcastReceiver 的 onReceive() 方法中重新创建警报。