1

我安排多意图具体PendingIntents被发送到广播接收器。 每一个意图之间的区别是什么时候会被接收并额外的数据包含的时间。取消与AlarmManager

现在我需要允许用户取消特定的报警。据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方法,但改变的数据,以这样的事情后,我的意图没有达到广播接收器了。

根据filterEquals,我可以更改哪些特定数据位以使每个意图唯一且仍然可以接收到我的简单BroadcastReceiver?

也许我可以用任何方式修改我的接收器?

+0

有一个称为requestCode PendingIntent.getBroadcast方法内部的参数,但因为它的文档状态:“发件人requestCode私人请求码(当前未使用)。”。这是否意味着,该代码没有以任何方式使用,或者我可以将其指定为用于取消未决意图的唯一ID? – Kostas 2012-03-09 15:25:43

+0

你能接受你的答案吗?这将从开放问题列表中删除此问题,并可能帮助其他人解决类似问题。谢谢。 – 2017-09-18 14:58:28

回答

1

我遇到类似的问题跑了我的应用程序。 在我的应用程序中,我使用SQLite的数据库来存储说明每个报警,具有独特的ROW_ID一起。

所以在我的闹钟列表视图中,每一行都有一个相应的ROW_ID与它关联。 如果用户点击一个特定的行,我只是通过这个ROW_ID到执行删除操作

现在,我的所有报警用意图它有自己的数据部分设置创建的方法为:

Uri.parse(Constants.INTENT_PRE + ROW_ID); 

所以为了删除它们,我创建具有相同的数据(如上述,与唯一ROW_ID一起)而创建它的是使用的意图。不用说,从“行为,数据,类型,类和类别”中,只有“数据”部分对于我现有的每个PendingIntents都是不同的。

希望这会有所帮助!

+0

嘿。那么,我不知道你在常量中有什么,但是在我的程序中没有INTENT_PRE,并且将数据设置为例如Uri.parse(Constants.CONTENT_DIRECTORY + o.getId())仍然使它无法接收到broadcastReceiver。 – Kostas 2012-03-10 11:44:18

+0

常量是我自己的类,我存储了一些不需要翻译或不属于UI的String常量。 – zeiger 2012-03-10 23:51:44

3

好了,所以我想它了。由于我的每一个报警都有其独特的时间和对象ID,这是我如何创建我的PendingIntent:

return PendingIntent.getBroadcast(context, time*100000+o.getId(), toFire, 0); 

现在时间或者是数据24或15(事件之前我火我报警前24小时或15分钟)和报警对象包含唯一的ID。因此,我添加了两个并将其指定为getBroadcast中的“requestCode”参数。这足以根据相同的数据制作独特的意图。 希望这可以帮助任何有同样问题的人!