对话通知和小部件

Android 11 增加了对以下功能的支持,即根据优先级和提醒级别自定义通知栏上的对话通知行为和位置,从而允许将对话标记为“重要”并在对话空间中启动特定于对话的 气泡

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

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

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

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

对话通知概览

Android 11 引入了一个新的系统原语“对话”,它由现有的共享快捷方式对象(已在 Android 9 中推出)表示。

“对话”原语可按如下方式使用

  • 通过 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 Verifier 测试。

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

对话微件概览

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

conv_widgets

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

Android 12 中的对话微件功能通过允许用户轻松地在主屏幕上打开聊天来促进连接。这些微件是增强型快捷方式,允许用户高效地返回到他们的对话,同时显示对话状态的片段。

合作伙伴必须实现以下功能

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

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

  • 合作伙伴无需修改或实现 HAL/驱动程序/内核代码。
  • 状态 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 将状态应用于该对话时,微件会反映这些状态。

  4. 用户可以调整微件大小,并且微件可以根据其当前启动器更改其大小。您的微件布局必须在不同设备上的不同启动器大小以及调整微件大小时都能良好运行。

要验证实现情况,请使用通知软件包中的以下测试

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

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