覆盖现有警报

时间:2013-06-19 19:49:54

标签: android android-alarms

我在我的应用中创建了一个alaram,它使用此代码调用BroadcastReceiver来设置通知:

Intent intent = new Intent(Benachrichtigung.CUSTOM_INTENT);
PendingIntent pendingIntent  = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);

alram = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alram.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), (24 * 60 * 60 * 1000), pendingIntent);

现在我希望用户可以设置通知的时间,因此我必须使用新值调用calendar.set。如何用新的警报覆盖现有警报?

1 个答案:

答案 0 :(得分:9)

要使用AlarmManager取消或更新闹钟,Intent必须使用filterEquals匹配。所以基本上,你重新创建PendingIntent与原作相同,AlarmManager会看到它们是相同的。这包括REQUEST_CODEINTENT_ACTIONINTENT_DATA(我可能会遗漏一些内容,但这些内容很重要。

注意:

EXTRAS不用于比较两个Intent

因此,如果两个Intent相等,那么第一个将被覆盖。当我有更多时间,我可以尝试找到一个资源来更好地解释这一点。

根据Intent Docs filterEquals

  

确定两个意图是否相同以进行意图解析(过滤)。也就是说,如果他们的行为,数据,类型,类别和类别是相同的。这不会比较意图中包含的任何额外数据。