gpt4 book ai didi

android - 如何创建不同的pendingintent 使filterEquals() 返回false?

转载 作者:IT老高 更新时间:2023-10-28 23:11:37 25 4
gpt4 key购买 nike

我正在使用 AlarmManager 来设置重复 Intent ,但它造成了一些小麻烦,所以希望任何人都可以提供帮助。

总结

有 2 个待处理的 Intent 。一个每天跑1000,另一个每天跑2000。每个都包含来自数据库的行 id 用于识别目的。代码如下所示:

Intent i = new Intent(mContext, ScheduleReceiver.class);
i.putExtra(RuleDBAdapter.KEY_ROWID, (int)taskId);
PendingIntent pi =PendingIntent.getBroadcast(...);
mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);

删除:

问题是当我们需要删除其中一个时。删除待处理 Intent 的正确方法是设置一个相同的 Intent ,然后从 AlarmManager 调用取消。

Android 文档:

public void cancel (PendingIntent operation)
Remove any alarms with a matching Intent. Any alarm, of any type, whose Intent matches this one (as defined by filterEquals(Intent)), will be canceled.

public boolean filterEquals (Intent other)
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.

所以在上面的例子中,如果我做了一个相同的 Intent 然后取消,上述两个 Intent 将被取消,因为它们来自相同的类/相同的操作等(除了“额外"data 是 rowId 但 filterEquals 不关心额外数据)。

有什么解决方法吗?

最佳答案

您可以在创建待处理 Intent 时尝试使用 requestCode 参数:

PendingIntent pi =PendingIntent.getBroadcast(mContext, yourUniqueDatabaseId,i,PendingIntent.FLAG_ONE_SHOT);

这应该创建一个用于匹配目的的唯一 Intent..

关于android - 如何创建不同的pendingintent 使filterEquals() 返回false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com