1

如何创建多个 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 的所有标志都不能解决我的问题。

4

2 回答 2

3

根据我的猜测,

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

像,
PendingIntent.getActivity(context, uniqID, nIntent, PendingIntent.FLAG_ONE_SHOT);


如果您不打算删除或更新意图,则可以将calendar.getTimeInMillis()其用作您的唯一 ID。

于 2012-09-21T09:48:35.687 回答
0

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

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

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

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

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

于 2012-09-21T08:23:52.347 回答