通知为驾驶员提供关于应用未使用时的事件的简短、及时的信息。通知可能会出现在通知中心,有些通知也可能以抬头通知的形式出现在显示屏上。要为 Android Automotive OS 创建通知,您可以使用与其他设备相同的NotificationBuilder
API。但是,为了确保驾驶员的安全并最大限度地减少分心,某些 API 方法和类受到限制或行为有所不同。
汽车中通知的不同之处
为了创建一个安全无干扰的驾驶环境,Android Automotive OS 上的通知与其他设备上的通知有所不同,具体如下:
- 简化的用户交互
- 基于驾驶状态的 UX 限制
简化的用户交互
为了帮助确保驾驶员能够专注于道路,车载通知采用简化的用户交互模型,具有以下功能:
- 无复杂控件
- 通知不允许使用复杂控件,例如点击展开通知、长按通知以获取更多选项或使用基于滑动长度的手势控件。
- 通知声音
- 只有在触发抬头通知时,通知才会发出声音。
Android Automotive OS 会自动向所有兼容汽车的消息通知添加播放和静音按钮。
- 播放:使用用户的默认数字助理(例如 Google 助理)或车辆的默认文本转语音系统向驾驶员朗读通知。
静音:防止在剩余的驾驶时间内,来自对话的任何未来消息显示抬头通知。来自静音对话的消息通知仍会出现在通知中心,驾驶员也可以从通知中心取消对话静音。
- 简化的通知显示选项
RemoteViews
和自定义内容视图不受支持。此外,以下通知样式也不受支持:BigPictureStyle
BigTextStyle
InboxStyle
如果您的应用使用其中一种通知样式向 Android Automotive OS 发送通知,则只会显示摘要文本。
- 简化的通知渠道管理
Android Automotive OS 不支持通知渠道和相关的 UI 功能,以减少汽车设备中丰富的管理任务。
基于驾驶状态的 UX 限制
Android Automotive OS 包含一个 UX 限制引擎。汽车制造商可以使用此引擎以以下方式基于汽车的驾驶状态限制通知:
- 在特定字符长度处截断通知字符串
- 隐藏
CATEGORY_MESSAGE
通知的消息摘要 - 限制通知中心可以显示的通知数量
支持的资源类型
默认情况下,Android Automotive OS 支持可在其他设备上用于通知的资源类型的有限子集。此子集包括以下资源类型:
- 可绘制对象
- 图标
- 图像
消息通知的兼容性要求
为了提供一致且干扰最小的用户体验,消息通知在 Android Automotive OS 上有特殊要求。
如果消息通知满足以下要求,则它与汽车兼容:
- 它属于
CATEGORY_MESSAGE
类别。 - 它使用
Notification.MessagingStyle
样式。 - 它仅包含未读消息。
它具有满足以下要求的标记为已读
Action
:- 语义操作设置为
Action.SEMANTIC_ACTION_MARK_AS_READ
。 Action
表明触发时不显示任何用户界面。
- 语义操作设置为
如果通知有回复
Action
,则Action
满足以下要求:- 语义操作设置为
Action.SEMANTIC_ACTION_REPLY
。 Action
表明触发时不显示任何用户界面。Action
包含单个RemoteInput
。
- 语义操作设置为
通知中心
几乎所有通知都会出现在通知中心,即使这些通知也作为抬头通知触发。通知会在整个驾驶过程中保留在通知中心。
驾驶员可以与通知中心中的通知进行交互。根据汽车制造商的不同,驾驶员可以通过以下一种或两种方式访问通知中心:
- 从屏幕顶部向下滑动,类似于其他设备上的通知抽屉。
- 点击系统界面中的按钮。
分组通知
相关通知相关通知会在通知中心自动分组,就像其他设备上的通知抽屉一样。但是,当驾驶员点击通知中心中组的摘要时,系统不会启动PendingIntent
,而是展开该组以显示其所有通知。
未出现在通知中心的通知
以下通知不会出现在通知中心
媒体播放
通知。Android Automotive OS 会收集有关正在进行的媒体播放的信息,并在用户界面的专用位置显示这些信息。请注意,必须使用非空令牌调用setMediaSession
,才能将通知识别为媒体播放。- 针对
CATEGORY_NAVIGATION
的逐向导航通知。 - 具有系统权限的应用和使用平台密钥签名的应用的前台服务通知,其重要性级别低于
IMPORTANCE_DEFAULT
。
悬浮式通知
悬浮式通知会以通知卡片的形式出现在屏幕顶部。由于悬浮式通知会吸引驾驶员的注意力,因此只有在信息对驾驶至关重要、时间敏感且可操作时才触发悬浮式通知。只有某些类别的通知才能触发悬浮式通知。
汽车制造商可以决定是否允许在通知中心打开时显示悬浮式通知。
应用如何触发悬浮式通知
应用触发悬浮式通知的要求因其是否具有系统权限而异。
- 具有系统权限的应用和使用平台密钥签名的应用
- 应用可以通过将通知渠道重要性设置为
IMPORTANCE_HIGH
或更高来触发悬浮式通知。 - 所有其他应用
应用可以通过将通知渠道重要性设置为
IMPORTANCE_HIGH
或更高,并确保通知属于以下类别之一来触发悬浮式通知
悬浮式通知的生命周期
应用触发悬浮式通知后,通知会立即出现在汽车屏幕上。如果驾驶员未采取任何操作,则悬浮式通知会在八秒后自动关闭,但以下情况除外
某些来电的悬浮式通知无法关闭,并且悬浮式通知会一直保留,直到驾驶员接听电话或电话终止。要符合来电不可关闭悬浮式通知的条件,通知必须满足以下要求
- 属于
CATEGORY_CALL
- 设置全屏意图
- 使用
setOngoing()
方法标记为正在进行
- 属于
如果应用在八秒钟的时间窗口内更新通知,则悬浮式通知将保留。
关闭悬浮式通知后,通知将列在通知中心,除非它是CATEGORY_NAVIGATION
通知。
汽车的通知 API 更改和限制
本节总结了每个类的差异,在这些类中,Notifications API 的行为有所不同或对 Android Automotive OS 具有限制。
Notification.Builder
表 1 和表 2 描述了Notification.Builder
类中的 API 更改和限制。
表 1. Notification.Builder
的公共方法更改
公共方法 | 效果 | 描述 | ||
---|---|---|---|---|
|
条件性无操作 | Notification.MessagingStyle 通知必须添加兼容性要求中指定的动作。添加的任何其他操作都不会呈现为通知按钮。 |
||
|
无操作 | 不支持RemoteViews 和自定义内容视图。 |
||
|
无操作 | 不支持通知徽章。 | ||
| 无操作 | 不支持倒计时器。 | ||
setColorized() |
约束已更改 |
平台签名应用:可配置;默认允许。 具有系统权限的应用:由平台配置;默认不允许。 所有其他应用:由平台配置;默认不允许。 |
||
setFullScreenIntent() |
行为已更改 | 不会自动启动意图。 | ||
setLargeIcon() |
行为已更改 | 大型图标显示在通知的右侧。 | ||
setLights() |
无操作 | Android Automotive OS 设备没有 LED 指示灯。 | ||
setOngoing() |
行为已更改 |
当通知也触发悬浮式通知时,行为有所不同。
|
无操作 | 不支持私有模式。 |
setSettingsText() |
无操作 | 通知不支持链接到应用设置的辅助功能。驾驶员通过应用访问应用设置。 | ||
setTicker() |
无操作 | 不支持滚动字幕文本。 |
表 2. Notification.Builder
的嵌套类更改
嵌套类 | 效果 | 描述 |
---|---|---|
|
未使用 | 仅显示摘要文本。不支持这些样式的详细通知。 |
Notification.BubbleMetadata |
未使用 | 不支持气泡。 |
Notification.MediaStyle |
隐藏 | 具有此样式的通知将被隐藏。Android Automotive OS 管理媒体通知和播放的用户界面交互。 |
Notification.MessagingStyle |
行为已更改 |
具有此样式的通知具有以下差异
|
|
未使用 | 不支持扩展程序。 |
Notification.Action.Builder
表 3 描述了Notification.Action.Builder
类中的 API 更改和限制。
表 3. Notification.Action.Builder
的公共方法更改
公共方法 | 效果 | 描述 |
---|---|---|
公共构造函数 | 行为已更改 | 公共构造函数中指定的图标将被忽略。 |
addRemoteInput |
行为已更改 | 为了最大限度地减少驾驶员分心,数字助理(例如 Google 助理)会为用户插入对消息的回复。用户无法键入消息。 |
setAllowGeneratedReplies |
无操作 | 不支持智能回复。 |