从 Android 7.0(API 级别 24)开始,您可以在以下位置显示相关通知: 。例如,如果您的应用针对收到的电子邮件显示通知,请将 接收同一群组新电子邮件的所有通知,以便收起 。
为了支持较低版本,请在 汇总所有单独的通知通常最好使用 收件箱样式的通知。
图 1. 收起状态(顶部)和展开状态(底部) 通知组。
如果您的用途符合以下所有条件,请使用通知组 案例:
子级通知为完整通知,可以显示 而无需创建群组摘要。
单独显示子级通知有一个好处。例如:
它们是可操作的,具体操作特定于每条通知。
每条通知中都包含更多信息,供用户查看。
如果您的通知不符合上述条件,请考虑 更新现有通知 或创建新的消息样式 通知以显示 可以在同一个会话中进行多项更新
创建通知组并为其添加通知
如需创建通知组,请为该通知组定义一个唯一标识符字符串。
然后,为您想要添加到通知组中的每条通知调用
setGroup()
、
传递群组名称例如:
Kotlin
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL" val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.new_mail) .setContentTitle(emailObject.getSenderName()) .setContentText(emailObject.getSubject()) .setLargeIcon(emailObject.getSenderAvatar()) .setGroup(GROUP_KEY_WORK_EMAIL) .build()
Java
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"; Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.new_mail) .setContentTitle(emailObject.getSenderName()) .setContentText(emailObject.getSubject()) .setLargeIcon(emailObject.getSenderAvatar()) .setGroup(GROUP_KEY_WORK_EMAIL) .build();
默认情况下,系统会根据通知的发布时间对其进行排序,
可以调用
setSortKey()
。
如果通知组的提醒必须由其他
通知, 呼叫, notification, call
setGroupAlertBehavior()
例如,如果你只想让听众的群组摘要发出声音,
组中的子级必须具有群组提醒行为
GROUP_ALERT_SUMMARY
。
其他选项包括
GROUP_ALERT_ALL
和
GROUP_ALERT_CHILDREN
。
设置通知组摘要
分组通知必须包含一个充当通知组的额外通知 摘要。如需启用分组通知,您必须设置群组摘要。本次 群组摘要必须包含其他各通知的部分内容 ,以帮助用户了解群组中的内容。如何让群组 根据 Android 版本显示摘要:
在低于 7.0(API 级别 24)的 Android 版本上,此类版本 群组通知时,系统仅显示您的群组摘要 并隐藏所有其他通知用户可以点按群组摘要 通知以打开您的应用。
在 Android 7.0 及更高版本中,系统会显示群组摘要通知 嵌套在一组通知中,每个通知都有一段文字片段, 分组通知。不会显示您在群组上设置的文字 摘要通知。用户可以展开嵌套的通知组 来查看组中的单个通知,如图 1 所示。
即使较新版本的 Android 不显示 因此您始终需要手动设置摘要,才能启用分组功能, 通知。群组摘要的行为可能在某些设备上有所不同 如穿戴式设备在群组摘要中设置富媒体内容有助于 在所有设备和版本上提供最佳体验。
如需添加通知组摘要,请按以下步骤操作:
创建一条包含群组说明的新通知 - 通常最好 收件箱样式 通知。
通过调用
setGroup()
将摘要通知添加到通知组中。通过调用
setGroupSummary(true)
。
以下代码展示了创建群组摘要的示例:
Kotlin
// Use constant ID for notifications used as group summary. val SUMMARY_ID = 0 val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL" val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject1.getSummary()) .setContentText("You will not believe...") .setGroup(GROUP_KEY_WORK_EMAIL) .build() val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject2.getSummary()) .setContentText("Please join us to celebrate the...") .setGroup(GROUP_KEY_WORK_EMAIL) .build() val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setContentTitle(emailObject.getSummary()) // Set content text to support devices running API level < 24. .setContentText("Two new messages") .setSmallIcon(R.drawable.ic_notify_summary_status) // Build summary info into InboxStyle template. .setStyle(NotificationCompat.InboxStyle() .addLine("Alex Faarborg Check this out") .addLine("Jeff Chang Launch Party") .setBigContentTitle("2 new messages") .setSummaryText("[email protected]")) // Specify which group this notification belongs to. .setGroup(GROUP_KEY_WORK_EMAIL) // Set this notification as the summary for the group. .setGroupSummary(true) .build() NotificationManagerCompat.from(this).apply { notify(emailNotificationId1, newMessageNotification1) notify(emailNotificationId2, newMessageNotification2) notify(SUMMARY_ID, summaryNotification) }
Java
// Use constant ID for notifications used as group summary. int SUMMARY_ID = 0; String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"; Notification newMessageNotification1 = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject1.getSummary()) .setContentText("You will not believe...") .setGroup(GROUP_KEY_WORK_EMAIL) .build(); Notification newMessageNotification2 = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject2.getSummary()) .setContentText("Please join us to celebrate the...") .setGroup(GROUP_KEY_WORK_EMAIL) .build(); Notification summaryNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setContentTitle(emailObject.getSummary()) // Set content text to support devices running API level < 24. .setContentText("Two new messages") .setSmallIcon(R.drawable.ic_notify_summary_status) // Build summary info into InboxStyle template. .setStyle(new NotificationCompat.InboxStyle() .addLine("Alex Faarborg Check this out") .addLine("Jeff Chang Launch Party") .setBigContentTitle("2 new messages") .setSummaryText("[email protected]")) // Specify which group this notification belongs to. .setGroup(GROUP_KEY_WORK_EMAIL) // Set this notification as the summary for the group. .setGroupSummary(true) .build(); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(emailNotificationId1, newMessageNotification1); notificationManager.notify(emailNotificationId2, newMessageNotification2); notificationManager.notify(SUMMARY_ID, summaryNotification);
摘要通知 ID 必须保持不变,使其仅发布一次, 以便您以后在摘要信息发生变化时进行更新。后续 新摘要必须更新现有摘要。
有关使用通知的示例代码,请参阅 Android 通知 示例 ,了解所有最新动态。
自动分组
在 Android 7.0(API 级别 24)及更高版本中,如果您的应用发送了 4 次或更多次 并且未指定组键或组摘要,系统可能 自动将它们归为一组自动分组显示的通知 带有一组摘要通知的群组摘要通知,标签为 分组通知。用户可以展开此摘要通知查看每一条 单独的通知,就像手动分组的通知一样。
自动分组行为可能会因设备类型而异。为了提供最佳 在所有设备和版本上都能顺畅使用通知 分组,请指定组键和组摘要,以确保对它们进行分组。