Android:在应用设备中管理多个推送通知

时间:2014-04-04 09:08:39

标签: android notifications push-notification android-notifications android-notification-bar

我正在开发一个应用程序,其中我实现了推送通知功能。 我的 onMessage - GCMIntentService.java的代码是:

@Override
protected void onMessage(Context context, Intent data) {
    String message = data.getExtras().getString("message");

    displayMessage(context, message);
    generateNotification(context, message);
}

代码 generateNotification -

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);
    Notification notification = new Notification(icon, message, when);

    String title = context.getString(R.string.app_name);

    Intent notificationIntent = new Intent(context, GCMMessageView.class);

    notificationIntent.putExtra("message", message);
    // set intent so it does not start a new activity
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent intent = PendingIntent.getActivity(context, 0,notificationIntent, 0);

    notification.setLatestEventInfo(context, title, message, intent);
    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(0, notification);
}

此代码工作正常。我正在收到推送消息和通知。

=>但是当我发送超过一条消息时,通知会重写。我只能在状态栏中看到最后一次通知。

应用程序的需要是 - 如果我发送多一个通知,那么所有应该显示在状态栏中。

因此,请在我的代码中指导我该怎么做。

5 个答案:

答案 0 :(得分:8)

尝试将不同的通知ID(即nid)置于意图中,并针对每个新通知通知而不是0,这将阻止过度编写通知

  PendingIntent intent = PendingIntent.getActivity(context, nid,notificationIntent, 0);

notificationManager.notify(nid, notification);

希望这会对你有所帮助

答案 1 :(得分:3)

获取随机数字:

Random random = new Random();
int m = random.nextInt(9999 - 1000) + 1000;

而不是:

notificationManager.notify(0, notification);

使用:

notificationManager.notify(m, notification);

答案 2 :(得分:2)

您好需要在notify方法中传递唯一的通知ID。 以下是传递唯一通知ID的代码:

//"CommonUtilities.getValudeFromOreference" is the method created by me to get value from savedPreferences.
String notificationId = CommonUtilities.getValueFromPreference(context, Global.NOTIFICATION_ID, "0");
int notificationIdinInt = Integer.parseInt(notificationId);

notificationManager.notify(notificationIdinInt, notification);

// will increment notification id for uniqueness
notificationIdinInt = notificationIdinInt + 1;
CommonUtilities.saveValueToPreference(context, Global.NOTIFICATION_ID, notificationIdinInt + "");
//Above "CommonUtilities.saveValueToPreference" is the method created by me to save new value in savePreferences.

如果您需要更多详细信息或任何查询,请与我们联系。 :)

答案 3 :(得分:1)

中触发Notification ID时,您需要更新Notification.
notificationManager.notify(ID, notification);

如何吗

要设置通知以使其不同,请通过调用NotificationManager.notify(ID, notification).向通知ID发出通知。要在发出通知后更改此通知,请创建NotificationCompat.Builder对象,构建来自它的Notification对象,并使用之前未使用的Notification发出Different ID

如果之前的通知仍然可见,系统会根据Notification object的内容对其进行更新。如果先前的通知已被取消,则会创建新通知。

有关更多信息,请访问官方docs

答案 4 :(得分:0)

notificationManager.notify(Different_id_everytime, notification);