未决意图通知问题

我的应用程序中有一个闹钟,它会启动一个通知,然后按下它就会启动一个活动。 问题是,当我创建多个警报时,从通知中启动的活动将获得与第一个相同的额外信息。我认为问题要么在于我放在未决意图中的意图,要么在于未决意图本身。我想我可能需要在其中一个上面放一面旗子,但我不知道是哪一个。

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);

额外的“细节”与下次发生通知时的情况相同,而不是具有不同的值。 直到我设置的意图,我确信正确的值去的“细节”,这是一个问题,得到第一个意图,每次我按下任何通知。 我怎样才能使它启动正确的意图? 希望我说得够清楚了 谢谢!

40006 次浏览

问题是,当我创造更多 比一个警报然后活动 从通知中启动的 和第一个一样的额外费用。

没错。

我怎样才能使它发射 意图正确吗?

这取决于您是否同时注册了两个警报。

如果没有,你可以 使用 ABC0或其他 PendingIntent标志之一让你的第二个 PendingIntent使用较新的额外。

然而,如果你将有两个报警器一次注册,与不同的 Intent额外,你将需要使两个 Intents更实质性的不同,使得 filterEquals()返回 false时,比较两个。例如,您可以调用 setData()setAction(),并为每个 Intent提供不同的值。

我解决这个问题的方法是,当你得到 PendingInant 时,分配一个唯一的 RequestCode:

PendingIntent.getActivity(context, requestCode, showIntent, 0);

通过这样做,您正在向系统注册不同/唯一的意图实例。 提示: 使 request Code 唯一的一个好方法是将当前系统时间传递给它。

int requestID = (int) System.currentTimeMillis();

另一种解决办法:

像这样使用 FLAG _ UPDATE _ CURRENT:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);

这招对我很管用

我在我的应用程序中遇到了这个问题,只是生成了一个随机数来克服重写通知的意图:

int random= new Random().nextInt();
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
random,
PendingIntent.FLAG_UPDATE_CURRENT
);

我遵循 U-ramos 提供的解决方案,这对我很有效

int requestID = (int) System.currentTimeMillis();


PendingIntent pendingIntent = PendingIntent.getActivity(this, requestID, showIntent, 0);