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

14

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

@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个回答

10
尝试在意图和通知中放置不同的通知 ID(即nid),而不是为每个新通知放置0,这将防止覆盖您的通知。
  PendingIntent intent = PendingIntent.getActivity(context, nid,notificationIntent, 0);

并且

notificationManager.notify(nid, notification);

希望这能帮到你


你救了我的一天。当多个推送通知被发送时,每个通知只执行最后一个挂起的意图。在我将0更改为notificationId之后,问题得到了解决。 - CoolMind

4

获取随机数:

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

改为:

notificationManager.notify(0, notification);

使用:

notificationManager.notify(m, notification);

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.

如果您需要更详细的信息或有任何疑问,请告诉我。 :)


2

在触发 通知 时,您需要更新您的 通知 ID

notificationManager.notify(ID, notification);

如何实现?

为了使通知有所不同,请通过调用NotificationManager.notify(ID,notification)并分配一个通知ID来设置。要在发出通知后更改此通知,请创建一个NotificationCompat.Builder对象,从中构建一个Notification对象,并使用之前未使用的不同ID发出Notification

如果先前的通知仍然可见,则系统会根据Notification object的内容更新它。如果已经关闭了以前的通知,则会创建新的通知。

有关更多信息,请参阅官方文档


0
notificationManager.notify(Different_id_everytime, notification);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接