当创建Android通知时,在PendingIntent中使用FLAG_UPDATE_CURRENT时,意图附加项会重复。

19
我希望创建多个通知,以启动一个活动(或刷新它),以显示产品描述。
Notification notification = new Notification(R.drawable.applicationicon,
            Resources.getString("NewSaleNotification", context),
            System.currentTimeMillis());
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;

Intent intent = new Intent(context, MainApplication.class);
intent.putExtra("saleid", saleid);

// to be sure the activity won't be restarted
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(context, SaleTitle, SaleMessage, pendingIntent);
notificationManager.notify(saleid, notification);

当我创建PendingIntent时,有4个选项:FLAG_CANCEL_CURRENT、FLAG_NO_CREATE、FLAG_ONE_SHOT和FLAG_UPDATE_CURRENT。
我想使用最后一个选项(http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_UPDATE_CURRENT),但它没有按照预期工作。如果我创建2个通知,它们都具有相同的“saleid”额外信息,这是最新的那个。如何创建多个具有不同“saleid”额外信息的通知?
1个回答

29

但它不能像应该的那样工作。

是的,它可以。

如果我创建了2个通知,它们都有相同的“saleid”额外信息,这是最新的额外信息。

这正是文档所说的应该发生的事情。

如何创建具有不同“saleid”额外信息的多个通知?

选项#1:在每个Intents中放置不同的操作字符串。这将使它们从filterEquals()的角度看不同,并提供单独的PendingIntents 。但是,由于您在IntentMainApplication.class)中指定了组件,因此操作不会影响Intent的路由方式。

选项#2:在getActivity()调用中使用不同的requestCode(第二个参数)。虽然这被记录为“目前未使用”,但确实会返回不同的PendingIntent对象。但是,由于此行为未经记录,因此将来可能会发生更改。

3
选项2绝对是我寻找的解决方案,甚至让我想在Stack Overflow上四处奔跑,将这个答案指给每个人。当选择不同的通知时,传递相同的额外信息给它们的活动会令人沮丧(最新的)。这个解决方法可以解决这个问题。至少目前是这样。 - Nuthatch
设置不同的操作解决了我的问题,感谢您的答案。 - Thamilan S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接