我使用AlarmManager来设置重复的意图,但它已经造成了一些小麻烦,所以希望任何人都可以提供帮助。如何创建不同的pendingintent所以filterEquals()返回false?
摘要
有2个未决意图。一个运行在1000,另一个运行在2000,每天。每个数据库都包含来自数据库的行标识以用于标识。该代码看起来是这样的:
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);
删除:
的问题是,当我们需要删除其中之一。删除挂起的意图的正确方法是设置相同的一个,然后从AlarmManager中调用取消。
Android文档:
public void cancel (PendingIntent operation)
具有匹配的意图删除任何警报。任何类型的意图与其匹配的警报(由filterEquals(Intent)定义)将被取消。public boolean filterEquals (Intent other)
确定是否两个目的是意图分辨率(滤波)的目的是相同的。也就是说,如果他们的行为,数据,类型,类别和类别相同。此不会比较意图中包含的任何额外数据。
所以在上面的例子,如果我做相同的意图再取消,上述两种意图将被取消,因为他们是来自同一个类/同样的动作等(除了“额外”数据是rowId,但filterEquals
不关心额外的数据)。
有没有解决方法?
谢谢!它会工作。不知道这很简单。 :) – markbse
我希望他们会更新文档,因为当你试图让某些东西工作时,它说requestCode的“未使用”真的很吓人。 –
小心:requestCode被定义为int,而通常(sqlite)行ID很长。 – HaimS