【问题标题】:How can I create several PendingIntent?如何创建多个 PendingIntent?
【发布时间】:2012-09-21 08:14:39
【问题描述】:

如何创建多个 PendingIntent? 我有几个通知,当用户按下最后一个时,一切正常,但点击通知没有响应。 我的代码是:

Intent notificationIntent = new Intent(context, MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK).setAction("ShowDialog");
notificationIntent.putExtra("args", Tools.getInstance().generateBundle(progressId, lastId));
notificationBuilder.setContentIntent(PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT));

我认为原因是 FLAG_CANCEL_CURRENT,但是 PendingIntent 的所有标志都无法解决我的问题。

【问题讨论】:

    标签: java android notifications android-pendingintent


    【解决方案1】:

    根据我的猜测,

    您只需为每个待处理的意图提供不同的唯一 ID,您的应用程序不会有任何问题。

    喜欢,
    PendingIntent.getActivity(context, uniqID, nIntent, PendingIntent.FLAG_ONE_SHOT);


    如果您不打算删除或更新 Intent,则可以使用 calendar.getTimeInMillis() 作为您的唯一 ID。

    【讨论】:

    • 是我遗漏了什么,还是说设置响应码可以解决问题?文档说它没有被使用。如果是这样的话,我不会相信这个解决方案在未来会起作用。
    • @TobiasRitzau 创建的每个挂起的意图都保留在记忆中,直到它被触发以及在它之后......并且每个都有不同的 id..如果您每次创建一个挂起的意图时都没有指定 id..它只是相同待处理意图的不同对象..获得差异许多待处理意图只是使差异对象不起作用..您还需要为每个对象提供差异ID。尝试按照自己的方式制作演示......我相信你会来回答+1
    • 我并不是说它在当前的实现中不起作用,但是根据文档,这是不正确的。那么你不能指望它在未来工作。只是说:)我会看看我是否能找到我以前读过的信息,如果我找到了,就会回来。
    • 好的,现在我已经看了一下这个。待处理的意图包装了一个 IntentSender。文档指出“如果创建应用程序稍后重新检索相同类型的 IntentSender(相同的操作、相同的 Intent 操作、数据、类别和组件以及相同的标志),它将收到一个表示相同令牌的 IntentSender,如果它仍然有效的。”因此没有提到requestCode。另一方面,当前的实现使用 requestCode。此解决方案不正确,因为不能保证将来可以正常工作。
    • @TobiasRitzau 感谢您对获得正确答案的浓厚兴趣,我也赞成。我一定会找时间告诉你。
    【解决方案2】:

    查看 CANCEL_CURRENT 标志,它与您描述的一样。您必须为不同的通知创建不同的待处理意图,否则它们被认为是相同的。查看IntentSender documentation 以了解您需要做什么来创建单独的待处理意图。我的建议是在数据中编码一个 id。如果您愿意,它可以非常简单,或者它可以具有识别意图的含义。这是特别感兴趣的 sn-p:

    如果创建应用程序稍后重新检索相同类型的 IntentSender(相同的操作,相同的 Intent 动作,数据,类别, 和组件,以及相同的标志),它将收到一个 IntentSender 如果仍然有效,则表示相同的令牌。

    您看到的问题是由于您重复使用相同的待处理意图,并且在“创建”新意图时取消了前一个意图。

    还请注意,根据设计指南,您应该只拥有每种类型的通知(例如,只有一个通知用于新电子邮件、新短信……)如果有多个相同类型的通知,它们应合并为一个通知。但是,这只是一个指导方针。

    您可以找到有关“requestCode/uniqueId 解决方案”为何在当前版本的 Android here 中有效的信息@

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-21
      • 2016-07-05
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      相关资源
      最近更新 更多