Android状态栏通知 – 意图第二次获得旧的额外

当我创build通过C2DM发送并在我的应用程序中收到的通知时,我想要传递C2DM中推送通知随附的一些数据。 这是第一次打开我的通知的罚款。 然后根据活动的状态使用onNewIntent或onCreate接收数据。

但是,如果我通过C2DM发送第二个推送通知,它将被正确接收到新的数据,但是当从意向中获得附加信息时,我仍然会从前一个消息中获取数据。 标题和我想查看的数据在通知中正确显示。 所以一定是我的意图错了。 如果活动正在运行,并且不是,则会发生这种情况。

要创build通知,请执行以下操作:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.ic_stat_notify_push, "Message received", System.currentTimeMillis()); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); notification.defaults |= Notification.DEFAULT_LIGHTS; Intent intent = new Intent(context, DesktopApp.class); intent.setAction("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra("msg_id", msg_id); intent.putExtra("title", title); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); notification.setLatestEventInfo(context, "New message", title + String.valueOf(msg_id), pendingIntent); notificationManager.notify(0, notification); 

然后阅读意图:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent myIntent = getIntent(); // this is just for example purpose int i = myIntent.getIntExtra("msg_id", -1); if (i != -1) Toast.makeText(this, "Got message! " + String.valueOf(i), Toast.LENGTH_LONG).show(); } @Override public void onNewIntent(Intent intent){ super.onNewIntent(intent); Bundle extras = intent.getExtras(); if (extras != null) { int i = extras.getInt("msg_id", -1); if (i != -1) Toast.makeText(this, "Got message! " + String.valueOf(i), Toast.LENGTH_LONG).show(); } } 

有什么build议么?

你需要设置一个干净的标志PendingIntent

 PendingIntent pintent = PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_CANCEL_CURRENT); 

看看这个post ,给出一个更长的解释。

用这个

 PendingIntent pi = PendingIntent.getActivity(context, UNIQUE_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);