android等待意图通知问题

我在我的应用程序中发生了一个警报事件,它会启动一个通知,然后按下时启动一个活动。 问题是,当我创build多个警报时,从通知中启动的活动获得与第一个相同的额外资源。 我认为这个问题或者是出于意图,或者是等待意图本身。 我想我可能需要在其中的一个标志,但我不知道哪一个。

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

下一次发生通知而不是具有不同的值时,“细节”额外的相同。 在我设定意图之前,我确信正确的价值是“细节”,所以每次我按任何通知时,都会得到第一个意图的问题。 我怎样才能使其发起正确的意图? 希望我尽可能清楚,谢谢!

问题是,当我创build多个警报时,从通知中启动的活动获得与第一个相同的额外资源。

正确。

我怎样才能使其发起正确的意图?

这取决于你是否有两个报警,将立即登记,或不。

如果没有,您可以使用FLAG_ONE_SHOT或其他PendingIntent标志之一来让您的第二个PendingIntent使用更新的附加组件。

但是,如果您将同时注册两个具有不同Intent filterEquals()警报,则需要使这两个Intents更加实质性不同,以便在比较两者时filterEquals()返回false 。 例如,您可以调用setData()setAction()并为每个Intent提供不同的值。

我解决这个问题的方法是通过在获得PendingIntent时分配唯一的requestCode

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

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

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

另一个scheme

像这样使用PendingIntent.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 );