我的应用程序中发生了一个警报,它会启动一个通知,然后在按下时启动一个活动。 问题是,当我创建多个警报时,从通知启动的活动会获得与第一个相同的额外内容。我认为这个问题要么是我在未决意图中的意图,要么是在未决意图本身。我想我可能需要在其中一个上放一面旗帜,但我不知道哪一个。
Intent showIntent =new Intent(context, notificationreceiver.class);
showIntent.putExtra("details", alarmname);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
showIntent, 0);
notification.setLatestEventInfo(context, "The event is imminent",
alarmname, contentIntent);
通知的接收者
Bundle b = getIntent().getExtras();
String eventname = b.getString("details");
details.setText(eventname);
“详细信息”额外信息与下次发生通知时相同,而不是具有不同的值。 直到我设置意图,我确信正确的值转到“详细信息”,因此每次按任何通知时都会获得第一个意图的问题。 如何才能启动正确的意图呢? 希望我尽可能清楚 谢谢!
答案 0 :(得分:116)
我解决这个问题的方法是在获得PendingIntent时指定一个唯一的 requestCode :
PendingIntent.getActivity(context, requestCode, showIntent, 0);
通过这样做,您将向系统注册不同/唯一的intent实例。 提示:使requestCode唯一的一个好方法是将当前系统时间传递给它。
int requestID = (int) System.currentTimeMillis();
答案 1 :(得分:68)
问题在于,当我创造更多 比一个警报然后活动 从通知中启动获取 与第一个相同的额外内容。
正确。
我怎样才能启动它 正确的意图?
这取决于您是否有两个将同时注册的警报。
如果没有,您可以use FLAG_ONE_SHOT
or one of the other PendingIntent
flags让您的第二个PendingIntent
使用新的附加内容。
但是,如果您同时注册了两个警报,并且有Intent
个额外警告,则需要使两个Intents
更加不同,以便filterEquals()
返回比较两者时false
。例如,您可以致电setData()
或setAction()
,并为每个Intent
提供不同的值。
答案 2 :(得分:0)
另一种解决方案:
像这样使用 PendingIntent.FLAG_UPDATE_CURRENT :
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);
这对我有用
答案 3 :(得分:0)
我在我的应用中遇到了这个问题,只是生成了一个随机数来覆盖通知意图:
int random= new Random().nextInt();
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
random,
PendingIntent.FLAG_UPDATE_CURRENT
);
答案 4 :(得分:0)
我遵循了U-ramos提供的解决方案,这对我有用
int requestID = (int) System.currentTimeMillis();
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestID, showIntent, 0);