从Android推送通知单击启动时,Intent数据未在活动中更新

时间:2014-05-28 11:06:26

标签: android android-intent push-notification

我正在为我的Android应用程序使用Google云消息.GCM部分正在成功运行。现在我想在用户点击状态栏中的通知图标时在UI活动中显示消息。

我使用以下代码从通知中启动 ResultShowActivity

Intent notificationIntent = new Intent(context, ResultShowActivity.class);
   notificationIntent.putExtra("Message",msg);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0);
    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.gcm_cloud)
            .setContentTitle("GCM Notification")
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setAutoCancel(true)
            .setSound(alarmSound)
            .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

正在正确发送消息,并在GCM通知出现时正确显示,但是当我在 ResultShowActivity 中捕获意图的额外内容时,它始终显示旧消息。 我正在使用以下代码在ResultShowActivity中接收来自intent的消息。

String GCMMsg = showViewIntent.getStringExtra("Message");  

我尝试使用

删除ResultShowActivity
intent.removeExtra("Message"); 

intent.replaceExtras(extras);

任何人都可以建议如何从intent中检索更新的消息。感谢您提供有关此问题的任何帮助。

2 个答案:

答案 0 :(得分:2)

请使用以下代码

int iUniqueId = (int) (System.currentTimeMillis() & 0xfffffff);


PendingIntent contentIntent = PendingIntent.getActivity(this,iUniqueId,notificationIntent, 0);

而不是遵循代码行

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

希望这会有所帮助

答案 1 :(得分:1)

您需要将 Intent.FLAG_ACTIVITY_SINGLE_TOP 添加到意图标志,并将 PendingIntent.FLAG_UPDATE_CURRENT 添加到待处理的意图标志。

Intent intent = new Intent(this,YourActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pendingIntent = 
PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

重要:确保实施onNewIntent(Intent intent)。当您的活动处于前台时,将调用此函数。