其他分享
首页 > 其他分享> > android – 覆盖现有的警报

android – 覆盖现有的警报

作者:互联网

我在我的应用程序中创建了一个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.如何用新的警报覆盖现有警报?

解决方法:

要使用AlarmManager取消或更新警报,Intent必须使用filterEquals进行匹配.所以基本上,你重新创建PendingIntent与你原来的相同,并且AlarmManager会看到它们是相同的.这包括REQUEST_CODE,INTENT_ACTION和INTENT_DATA(我可能会遗漏一些东西,但这些很重要.

注意:

EXTRAS不用于比较两个Intent.

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

根据Intent Docs filterEquals

Determine if two intents are the same for the purposes of intent resolution (filtering). That is, if their action, data, type, class, and categories are the same. This does not compare any extra data included in the intents.

标签:android,android-alarms
来源: https://codeday.me/bug/20190723/1509355.html