android挂起意图通知问题

时间:2010-06-09 19:11:52

标签: android notifications android-intent

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

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

“详细信息”额外信息与下次发生通知时相同,而不是具有不同的值。 直到我设置意图,我确信正确的值转到“详细信息”,因此每次按任何通知时都会获得第一个意图的问题。 如何才能启动正确的意图呢? 希望我尽可能清楚 谢谢!

5 个答案:

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