我正在计划将多个意图发送到BroadcastReceiver。
每个意图之间的差异是它收到的时间与它包含的额外数据的时间。
现在,我需要允许用户取消特定的警报。根据AlarmManager.cancel()javadoc,它使用filterEquals方法比较意图:
http://developer.android.com/reference/android/content/Intent.html#filterEquals(android.content.Intent)
现在的问题是,根据filterEquals,我的所有意图都是相同的。方法检查“动作,数据,类型,类和类别”。
唯一的数据既可以是意向的额外捆绑,也可以是AlarmManager中的时间。
我尝试更改任何这些参数-例如,使用:
intent.setData(Uri.withAppendedPath(Uri.EMPTY, "some_unique_data"));
根据filterEquals方法,这将使每个意图都变得唯一,但是在将Data更改为类似的内容之后,我的意图就不再到达BroadcastReceiver了。
我可以更改哪些特定的数据位以根据filterEquals使每个意图都唯一,并且仍然可以接收到我的简单BroadcastReceiver?
也许我可以用任何方式修改接收器?
最佳答案
好的,我知道了。由于每个警报都有唯一的时间和对象ID,因此这就是我创建PendingIntent的方式:
return PendingIntent.getBroadcast(context, time*100000+o.getId(), toFire, 0);
现在时间是24或15(事件触发警报前24小时或15分钟前),警报数据对象包含唯一ID。因此,我将两者都添加并在getBroadcast中将其指定为“ requestCode”参数。这足以根据相同的数据制定唯一的意图。
希望这对遇到同样问题的人有所帮助!