首先,让我们来介绍一下如何访问之前创建的闹钟:
您可以通过为每个闹钟创建唯一的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()方法中重新创建您的闹钟即可。