用新行更新android通知正在删除前一行

时间:2014-08-05 11:19:58

标签: android android-notifications

我想将通知分组到摘要中。

我通过为所有通知提供单个ID来实现此目的。这样android就不会创建新的通知,而是更新现有的通知(简化代码):

Notification summaryNotification = new NotificationCompat.Builder(this)
    .setGroupSummary(true)
    .setDefaults(Notification.DEFAULT_ALL)
    .setStyle(new NotificationCompat.InboxStyle()
            .addLine(msg)
            .setBigContentTitle("My App")
            .setSummaryText("FooBar"))
    .build();

mNotificationManager.notify(uuid, summaryNotification);

UUID始终相同,因此应更新通知。但是,当新通知到达时,setStyle似乎会被覆盖。

这导致旧的addLine(msg)消失。但是我希望在没有某种通知管理器服务器端的情况下添加新消息。

有任何想法或建议吗?

1 个答案:

答案 0 :(得分:4)

我认为您误解了通知构建器。

NotificationCompat.Builder构建包含所有内容的完整通知。 重复使用相同的ID只会告诉通知管理器使用相同的ID替换现有的通知:(Source

  

[...]更新或创建NotificationCompat.Builder对象,从中构建Notification对象,并使用您之前使用的相同ID发出通知。如果以前的通知仍然可见,系统会从通知对象的内容中更新

因此addLine不是对现有通知执行的操作,而是在您创建的新构建器上执行的操作(当时为空)。

如果您想使用收件箱样式向现有通知添加一行,则需要

  • 保留原始构建器对象,根据需要添加行并重新发送具有相同ID的通知
  • 创建一个新的构建器并首先添加旧行,然后添加新行。您需要从某处存储或检索旧行(取决于您的应用程序)。