0

我收到了一些带有 C2DM 的 json 消息,到目前为止这很好。从 C2DM 有效负载中提取 json 消息后,我创建了一个通知,用户单击该通知将打开一个活动,该活动将显示收到的消息。

第一次收到 C2DM 消息(例如,“test number 1”消息),通知被创建,当用户单击它时,活动成功启动,我可以看到消息“test number 1”。然后我发送第二条 C2DM 消息,文本为“测试号 2”,通知已创建,但是当我单击通知时,活动开始我看到“测试号 1”消息,而不是第二条消息。

我正在创建这样的通知:

  public static void createMessageNotification(Context context, Message msg) {
     int icon = R.drawable.ic_stat_notify_msg;          // icon from resources
     CharSequence tickerText = "You've got a new message";  // ticker-text
     long when = System.currentTimeMillis();            // notification time
     CharSequence contentTitle = "Service Message";  // message title
     CharSequence contentText = "New message";

     Intent notificationIntent = new Intent(Intent.ACTION_MAIN);
     notificationIntent.setClass(context, MessageDetailsActivity.class);
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
     Bundle b = new Bundle();
     b.putSerializable("message", msg);
     notificationIntent.putExtras(b);

     PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

     Notification notification = new Notification(icon, tickerText, when);
     notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
     long[] vibrate = {0,100,200,300};
     notification.vibrate = vibrate;
     notification.flags = Notification.FLAG_AUTO_CANCEL;

     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
     mNotificationManager.notify(AppUtil.getNextPushIndexMessage(), notification);
  }

MessageDetailsActivity.java 可以在这里找到:http: //pastebin.com/tmBK7rNH

我在日志中看到消息正确来自 C2DM 服务,带有新的数据和值,但我无法让 MessageDetailsActivity 显示新信息。

谢谢你

4

1 回答 1

2

PendingIntent.getActivity()第二次调用可能与第一次调用时返回的结果相同PendingIntent

这可能有点令人困惑。Android 会保留一个缓存,PendingIntents当您调用getActivity()或尝试查找与您提供的参数匹配的缓存getBroadcast()时返回给您。你在你的调用中给出了一个匹配的对象,你第一次给出它和你第二次给出它之间的唯一区别是在. 不幸的是,当您调用它时,它会忽略它尝试在其缓存中找到匹配项的时间,因此它会返回您创建的第一个匹配项。getService()PendingIntentIntentgetActivity()IntentIntentExtrasgetActivity()ExtrasPendingIntent

要解决此问题,请将您的调用更改为 getActivity() 以包含 FLAG_UPDATE_CURRENT 标志,如下所示:

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
                      notificationIntent, FLAG_UPDATE_CURRENT);

这将替换缓存的 PendingIntent 的数据以包含新的 Extras。

于 2012-05-29T17:01:22.630 回答