GCM消息被覆盖

时间:2013-12-31 11:09:46

标签: android push-notification google-cloud-messaging android-pendingintent

我正在使用GCM推送通知向用户传递一些通知。我的问题是当我发送单个消息时,如果发送多个消息,这可以正常工作,然后向所有通知显示最后一条消息。

我在哪里犯了错误?

  private static void generateNotification(Context context, String message) {
  int icon = R.drawable.ic_launcher;
  long when = System.currentTimeMillis();
  NotificationManager notificationManager = (NotificationManager)
          context.getSystemService(Context.NOTIFICATION_SERVICE);

  Intent notificationIntent = new Intent(context, GCMMessageView.class);
  String[] messageArray = message.split("\\#");
  // param :: agentId, Name, Msg
  DatabaseHelper db = new DatabaseHelper(context);
  int notificationId = db.insertnotifications(messageArray[1], messageArray[0], messageArray[messageArray.length-1]);

  notificationIntent.putExtra("message", messageArray[messageArray.length-1]);
  // set intent so it does not start a new activity
  notificationIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
  PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

  Notification notification = new NotificationCompat.Builder(context)
        .setContentText(messageArray[messageArray.length-1])
        .setContentTitle(context.getString(R.string.app_name))
        .setSmallIcon(icon)
        .setWhen(when)
        .setContentIntent(intent)
        .build();

    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    // Play default notification sound
    notification.defaults |= Notification.DEFAULT_SOUND;

    // Vibrate if vibrate is enabled
    notification.defaults |= Notification.DEFAULT_VIBRATE;
    notificationManager.notify(notificationId, notification);
}

4 个答案:

答案 0 :(得分:9)

在您的通知中使用了此编码

  int requestID = (int) System.currentTimeMillis();
  PendingIntent intent = PendingIntent.getActivity(context, requestID,
  notificationIntent,0 );

然后你的通知不会覆盖我希望这会帮助你

答案 1 :(得分:8)

为每封邮件设置唯一的通知ID。因此,它被覆盖了。

答案 2 :(得分:2)

是的,同意Dipo的回答。根据{{​​3}}由于多个通知的通知ID相同,因此被覆盖。在接收方端收到最后一条消息。您需要为每个通知实现随机唯一通知ID。有很多方法可以实现这一点。你可以用这个

int notificationId = new Random().nextInt();

您还可以在Mili Seconds中使用系统时间作为通知ID。然后您需要将此唯一通知ID传递给notificationManager.notify()

干杯!保持编码

答案 3 :(得分:0)

对于该线程的回答很晚,但认为它将对某人有所帮助。相同的实现方式对于FCM Firebase实施也很好

// Get a random value 
int notificationId = new Random().nextInt();
// Add the notification ID which is unique as a first value of the notify method.
notificationManager.notify(notificationId, notificationBuilder.build());