【问题标题】:Canceling specific PendingIntents with AlarmManager使用 AlarmManager 取消特定的 PendingIntents
【发布时间】:2012-03-09 15:16:15
【问题描述】:

我正在安排多个意图发送到广播接收器。 每个意图之间的区别在于它被接收的时间和它包含的额外数据。

现在我需要允许用户取消特定警报。根据 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?

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

【问题讨论】:

  • PendingIntent.getBroadcast 方法中有一个名为 requestCode 的参数,但正如其文档所述:“requestCode Private request code for the sender (currently not used).”。这是否意味着此代码不会以任何方式使用,或者我可以将其指定为唯一 ID 以取消待处理的意图?
  • 您能否接受您的回答。这将从开放问题列表中删除此问题,并可能帮助其他有类似问题的人。谢谢。

标签: android android-intent alarmmanager android-pendingintent


【解决方案1】:

好的,所以我想通了。由于我的每个闹钟都有唯一的时间和对象 ID,这就是我创建 PendingIntent 的方式:

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

现在时间是 24 或 15(在我发出警报的事件前 24 小时或前 15 分钟),并且警报数据对象包含唯一 ID。因此,我将两者都添加并指定为 getBroadcast 中的“requestCode”参数。这足以根据相同的数据做出独特的意图。 希望这对遇到同样问题的人有所帮助!

【讨论】:

    【解决方案2】:

    我的应用遇到了类似的问题。 在我的应用程序中,我使用 SQLite DB 来存储有关每个警报的详细信息以及唯一的 ROW_ID。

    所以在我的警报列表视图中,每一行都有一个与之关联的相应 ROW_ID。 如果用户单击特定行,我只需将此 ROW_ID 传递给执行删除操作的方法

    现在,我所有的警报都是使用 Intents 创建的,其数据部分设置为:

    Uri.parse(Constants.INTENT_PRE + ROW_ID);
    

    所以为了删除它们,我创建了一个 Intent,该 Intent 具有创建时使用的相同数据(如上,以及唯一的 ROW_ID)。

    不用说,从“动作、数据、类型、类和类别”来看,对于我现有的每个 PendingIntent,只有“数据”部分不同。

    希望这会有所帮助!

    【讨论】:

    • 嘿。好吧,我不知道您的常量中有什么,但是在我的常量中没有 INTENT_PRE 并且将 Data 设置为例如 Uri.parse(Constants.CONTENT_DIRECTORY + o.getId()) 仍然使它无法被广播接收器接收。
    • Constants 只是我自己的类,我在其中存储了一些不需要翻译或不属于 UI 的字符串常量。
    猜你喜欢
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多