Android 如何将多个通知正确地堆叠在一起? 背景

Android 如何将多个通知正确地堆叠在一起? 背景,android,notifications,Android,Notifications,假设我有一些导致显示新通知的事件 与显示一个全新的通知(使用不同的ID)不同,建议将它们堆叠在一起,就像编写的那样,这样实际上就可以替换上一个通知 堆叠通知的示例: 作为一个例子(这只是一个例子,所以请不要固执己见),让我们以Gmail为例。如果您收到电子邮件,将显示通知。如果用户现在单击它,它将直接转到消息本身。但是,如果有更多的电子邮件到达,通知将替换为一个堆叠的通知,单击该通知后将进入“电子邮件列表”活动。不仅如此,通知还显示了新电子邮件的数量 问题 一旦显示通知,您就无法控制其中显示的

假设我有一些导致显示新通知的事件

与显示一个全新的通知(使用不同的ID)不同,建议将它们堆叠在一起,就像编写的那样,这样实际上就可以替换上一个通知

堆叠通知的示例:

作为一个例子(这只是一个例子,所以请不要固执己见),让我们以Gmail为例。如果您收到电子邮件,将显示通知。如果用户现在单击它,它将直接转到消息本身。但是,如果有更多的电子邮件到达,通知将替换为一个堆叠的通知,单击该通知后将进入“电子邮件列表”活动。不仅如此,通知还显示了新电子邮件的数量

问题 一旦显示通知,您就无法控制其中显示的内容。你只是更换了它,你不知道它以前是什么

出现的问题是,您希望将多个通知堆叠到一个通知中,但仍然显示有关以前通知的一些信息

此外,根据文档,只有在用户明确拒绝通知时才使用“”功能:

在清除通知时提供要发送的挂起内容 由用户显式地执行

问题 当您将以前的通知数据替换为新的通知时,是否可以获取其数据

管理通知的建议方法是什么,以便单个通知具有特定类型和数据的意图(单击时),而堆叠的通知具有不同的意图


使用堆叠通知的应用程序是否真的管理其背后的数据库,并以某种方式监控其状态?

您可以访问可见的通知

如第段所述,您可以使用相同的通知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数据库中,并在读取后将其删除。

您可以访问可见的通知

如第段所述,您可以使用相同的通知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数据库中,并在读取后将其删除。

这段代码使您能够查看收到的所有通知,并仅在取消通知时才取消特定通知

Random random = new Random();
int m = random.nextInt(9999 - 1000) + 1000;
Notification n = builder.getNotification();
n.defaults |= Notification.DEFAULT_ALL;        
nm.notify(m, n);

这段代码使您能够查看收到的所有通知,并且仅当您取消某个通知时才取消该通知

Random random = new Random();
int m = random.nextInt(9999 - 1000) + 1000;
Notification n = builder.getNotification();
n.defaults |= Notification.DEFAULT_ALL;        
nm.notify(m, n);

您可以隐藏通知,也可以显示通知,仅此而已。通知托管在另一个进程中,这就是为什么。您可以隐藏通知,也可以显示通知,仅此而已。通知托管在另一个进程中,这就是为什么。当您的通知只是被取消时,系统不会传递其意图。最终从数据库中清除它们是很好的。您在代码中显示的是设置一个新通知。如何获取上一个通知的数据以将其堆叠到新的通知中?您必须将未读通知的数据保存在某个位置,例如数据库中。当用户点击通知时,您必须清除所有记录。当您的通知只是取消时,系统不会传递其意图。最终从数据库中清除它们是很好的。您在代码中显示的是设置一个新通知。如何获取上一个通知的数据以将其堆叠到新的通知中?必须将有关未读通知的数据保存在某个位置,例如数据库中。当用户点击通知时,必须清除所有记录。