对话通知和 widget

Android 11 开始支持按优先级和提醒级别自定义对话通知的行为及其在通知栏中的位置,允许将对话标记为“重要”以及在对话空间中启动对话专用的对话泡

在这些 Android 11 功能的基础上,Android 12 提供了两种新的对话功能:

  • “设置”中的“近期对话”功能:通过此功能,用户可以自定义近期对话的通知行为,而无需等待通知。

  • 对话微件功能:通过此功能,用户可以在主屏幕上轻松打开聊天对话,快速查看近期的对话。

本文档介绍了对话通知和对话微件的实现、自定义及验证方面的内容。

对话通知概览

Android 11 引入了新的系统基元,即 Conversation,通过现有的共享快捷方式对象(已随 Android 9 发布)表示。

Conversation 基元可以通过如下方式使用:

  • 通过 Sharesheet(已在 Android 10 中推出)在系统中的应用之间分享对话数据。

  • 用于驱动对话泡(Android 11 中的快捷方式)。参见图 1

  • 参与通知栏顶部的新对话空间(在 Android 11 中实现)。参见图 2

  • 用于创建对话微件(在 Android 12 中实现)。

    conv_bubbles

    图 1:通知以对话泡形式从抽屉式通知栏中启动

    conv_notification

    图 2:位于通知栏顶部的对话空间

除了链接到表示对话的快捷方式外,通知还会使用 MessagingStyle 将对话的最后一条消息包含在对话空间中。

GMS 合作伙伴必须实现以下内容:

  • 一个新的对话空间,在通知栏顶部作为一个单独的部分显示。
  • 一种通知样式,允许和支持对话专用的对话泡样式。

实现对话的合作伙伴也必须实现“重要”对话。不过,对话的实现可以与类似性质的 OEM 概念保持一致。总体而言,合作伙伴可以自由地使对话部分与其特定的系统界面保持一致。合作伙伴不必修改或实现 HAL/驱动程序/内核代码/扩展。

请参阅 AOSP 的 SystemUI 和 PeopleService 部分中的以下参考实现:

frameworks/base/packages/SystemUI/src/com/android/systemui/people/
frameworks/base/core/java/android/app/people/
frameworks/base/services/people/java/com/android/server/people/

验证

为确保您的功能版本能够按预期工作,请验证以下内容:

  1. 完全支持 Conversation API 的应用会在新部分中找到其通知,并可以通过对话而不是通用 NotificationChannel 自定义这些通知。

  2. 对话专用对话泡可以正常工作。

如需验证实现,请在通知软件包中使用以下测试:

  • CTS 测试。

    cts/tests/app/src/android/app/cts/NotificationManagerTest.java
    
  • CTS 验证程序测试。

    cts/apps/CtsVerifier/src/com/android/cts/verifier/notifications/
    
    

对话微件概览

在 Android 12 中,对话 widget 功能以 Android 11 中创建的对话表示法为基础构建(如前一部分所述),它允许应用为在对话 widget 中显示的对话提供状态。

conv_widgets

图 3:对话微件中显示的对话

通过 Android 12 中的对话微件功能,用户可以在主屏幕上轻松打开聊天对话,方便联系。此类微件是增强的快捷方式,不仅能显示对话状态的片段,还可以让用户高效地返回对话。

合作伙伴必须实现以下各项:

  1. SystemUI 提供的一个微件。
  2. 从微件选择屏幕添加这些微件的流程。
  3. 支持调整微件大小,如下所示:

实现对话微件时,请注意以下依赖项:

  • 合作伙伴不必修改或实现 HAL/驱动程序/内核代码。
  • Status API 会用于实现,该 API 可让应用向对话和关联的微件添加状态或可用性信息。
  • 对于新设备实现和升级设备实现,流程是相同的。
  • 对话微件功能依赖于 Android 12 中推出的一项新功能,这项新功能会缓存近期发现的对话(例如,来自通知的会话)。该新功能允许展开用户可能会添加到主屏幕的对话列表。

请参阅 SystemUI 和 Launcher3 文件中的以下参考实现:

frameworks/base/packages/SystemUI/src/com/android/systemui/people/
frameworks/base/core/java/android/app/people/
frameworks/base/services/people/java/com/android/server/people/

自定义

您无法启用或停用对话微件功能。不过,只要符合 GMS 要求,合作伙伴就可以更改微件模板的布局。

验证

为确保您的功能版本能够按预期工作,请验证以下内容:

  1. 长按启动器时,可以通过微件选择器为对话添加新的对话微件。如需了解微件选择器界面,请参见图 4:

    widget_picker

    图 4:用于添加新对话微件的微件选择器界面

  2. 在从所选对话向设备发送通知时,微件会更新,以反映这些通知。

  3. 使用 ConversationStatus API 向该对话应用状态时,widget 会反映这些状态。

  4. 用户可以调整微件的大小,并且微件可以根据当前的启动器更改其大小。微件布局必须能够很好地适应不同设备上的不同启动器尺寸,并可以对微件的大小进行调整。

如需验证实现,请在通知软件包中使用以下测试:

  • 针对 API Surface 的 CTS 测试 (PeopleManagerTest)。

    cts/tests/app/src/android/app/cts/NotificationManagerTest.java
    
  • 针对 GMS 要求的手动测试 - 对话。