通知为驾驶员提供关于应用未在使用时发生的事件的简短及时信息。通知可能出现在 通知中心,某些通知也可能以 抬头通知 的形式出现在显示屏上。要为 Android Automotive OS 创建通知,您使用与其他设备相同的 NotificationBuilder
API。但是,为了帮助确保驾驶员安全并最大程度地减少分散注意力,某些 API 方法和类 被限制或行为有所不同。
汽车中通知的差异
为了创建安全无干扰的驾驶环境,Android Automotive OS 上的通知与其他设备上的通知有所不同,具体区别如下:
- 简化的用户交互
- 基于驾驶状态的 UX 限制
简化的用户交互
为了帮助确保驾驶员可以专注于道路,汽车中的通知具有简化的用户交互模型,并具有以下功能:
- 没有复杂控件
- 通知不允许使用复杂控件,例如点击展开通知、长按通知以获取更多选项或使用基于滑动长度手势的控件。
- 通知声音
- 通知仅在触发抬头通知时才会播放声音。
Android Automotive OS 会自动向所有 与汽车兼容的消息通知 添加播放和静音按钮。
- 播放:使用用户的默认数字助理(例如 Google Assistant)或车辆的默认文本转语音系统,将通知读给驾驶员。
静音:阻止任何未来消息在本次驾驶期间以抬头通知的形式出现。来自静音对话的消息通知仍将出现在通知中心,驾驶员也可以从通知中心取消静音对话。
- 简化的通知显示选项
RemoteViews
和自定义内容视图不受支持。此外,以下通知样式不受支持:BigPictureStyle
BigTextStyle
InboxStyle
如果您的应用使用这些通知样式之一向 Android Automotive OS 发送通知,则只会显示摘要文本。
- 简化的通知渠道管理
Android Automotive OS 不支持通知渠道和相关的 UI 功能,以减少汽车设备中丰富管理任务的普遍性。
基于驾驶状态的 UX 限制
Android Automotive OS 包含一个用户体验限制引擎。汽车制造商可以使用此引擎以以下方式根据汽车的驾驶状态限制通知
- 将通知字符串截断为特定字符长度
- 隐藏
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() |
不执行操作 | Ticker 文本不受支持。 |
表 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 |
不执行操作 | 智能回复不受支持。 |