如何在Android中维护GCM推送消息,将其替换为新消息

时间:2015-07-23 13:10:46

标签: android android-intent google-cloud-messaging android-notifications

我的Android应用程序接收带有一些短信的推送通知。如果我点击一下它会将我重定向到所需的活动,并带有最新的推送消息(意图消息),但我想用相应的推送消息显示我想要的活动。 例如,如果我收到10个推送通知并点击第3个通知,我的代码会将第10个推送通知的消息重定向到指定的活动,但我想显示第3个意向推送通知的消息。

我知道 PendingIntent.FLAG_UPDATE_CURRENT 替换了意图消息,如何重定向相应的消息而不是最后一条消息?

我尝试了以下内容:

Intent intent = new Intent(this, TestActivity2.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
        | Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.putExtra("uid", uid);

PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0,
        intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
        getApplicationContext());
Notification notification = mBuilder
        .setSmallIcon(R.drawable.ic_launcher)
        .setTicker(textMsg)
        .setWhen(0)
        .setAutoCancel(true)
        .setContentTitle(textMsg)
        .setStyle(
                new NotificationCompat.BigTextStyle().bigText(textMsg))
        .setContentIntent(resultPendingIntent).setContentText(textMsg)
        .build();

NotificationManager notificationManager = (NotificationManager) getApplicationContext()
        .getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify((int) System.currentTimeMillis(),
        notification);

2 个答案:

答案 0 :(得分:0)

改为使用FLAG_ONE_SHOT并更改getActivity中设置为0的第二个参数。This answer会清楚显示。

答案 1 :(得分:0)

您应该更改不同邮件的pendingIntend内容。 这是PendingIntent文档的片段。 " PendingIntent本身只是对系统维护的令牌的引用,描述用于检索它的原始数据。这意味着,即使其拥有的应用程序的进程被终止,PendingIntent本身也将保持可用于已经给出它的其他进程。如果创建应用程序稍后重新检索相同类型的PendingIntent(相同的操作,相同的Intent操作,数据,类别和组件以及相同的标志),它将接收表示同一令牌的PendingIntent,如果它仍然有效,并且可以因此,请调用cancel()将其删除。"

简单来说......尝试为每个pendingIntent传递不同的id(类似于currentEpochTime)。