我正在使用AlarmManager来设置重复意图,但是它引起了一些小问题,希望有人能帮忙。
概要
有2个待处理的意图。一个在每天的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);
删除:
问题在于我们需要删除其中一个。正确的删除pending intent的方法是设置一个相同的pending intent,然后从AlarmManager调用cancel。
Android文档:
public void cancel(PendingIntent operation)
删除与匹配意图的任何警报。任何类型的警报,如果其意图与此匹配(由filterEquals(Intent)定义),都将被取消。public boolean filterEquals(Intent other)
确定两个意图在意图解析(过滤)的目的上是否相同。也就是说,如果它们的操作、数据、类型、类和类别相同,则它们相同。这不比较包含在意图中的任何额外数据。
因此,在上面的示例中,如果我创建一个相同的意图,然后取消,上述两个意图都将被取消,因为它们来自相同的类/相同的操作等(除了“extra”数据是rowId,但filterEquals
不关心额外数据)。
有没有任何解决办法?