假设我有一些事件导致显示新通知。
建议不要显示全新的通知(使用不同的ID),而是将它们堆叠在一起,如here和here所示,这样您实际上就可以替换上一个。
堆叠通知的示例:
作为一个例子(这只是一个例子,所以请不要坚持下去),让我们拿Gmail。如果您收到电子邮件,则会显示通知。如果用户现在点击它,它将直接进入消息本身。但是,如果有更多电子邮件到达,则通知将被替换为堆叠的通知,单击该通知时将直接转到电子邮件列表活动。不仅如此,通知还会显示新电子邮件的数量。
一旦您显示通知,您就无法控制其中显示的内容。你只需更换它,你就不知道它之前是什么。
问题出现在您希望将多个通知一起堆叠到一个通知的位置,并且仍然显示有关先前通知的一些信息。
此外,根据文档,仅当用户明确驳回通知时才使用“setDeleteIntent”函数:
提供PendingIntent以在清除通知时发送 由用户明确表示。
当您用新的数据替换之前,是否可以获取先前通知的数据?
管理通知的推荐方法是什么,以便单个用户具有特定类型和数据的意图(点击时),堆叠的意图具有不同的意图?
使用堆叠通知的应用是否真的管理其背后的数据库,并以某种方式监控它们的状态?
答案 0 :(得分:0)
您可以访问可见的通知。
如段落 Updating notifications 中所述,您可以使用相同的通知ID
访问应用创建的可见通知mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated
int notifyID = 1;
mNotifyBuilder = new NotificationCompat.Builder(this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
numMessages = 0;
// Start of a loop that processes data and then notifies the user
...
mNotifyBuilder.setContentText(currentText)
.setNumber(++numMessages);
// Because the ID remains unchanged, the existing notification is
// updated.
mNotificationManager.notify(
notifyID,
mNotifyBuilder.build());
...
我还建议在本地Sqlite数据库上保存有关未读通知的信息,并在读取后将其删除。
答案 1 :(得分:-1)
这段代码可让您查看收到的所有通知,并在取消时取消特定通知。
Random random = new Random();
int m = random.nextInt(9999 - 1000) + 1000;
Notification n = builder.getNotification();
n.defaults |= Notification.DEFAULT_ALL;
nm.notify(m, n);