通知会向驾驶员提供有关您的应用在未使用时的事件的简短及时信息。通知可以显示在通知中心,有些通知还可以以浮动通知的形式显示在屏幕上。要为 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 收集,并显示在用户界面中的专用位置。请注意,必须使用非 null 令牌调用setMediaSession
,才能将通知识别为媒体播放。CATEGORY_NAVIGATION
的逐向导航通知。- 对于具有系统特权的应用以及使用平台密钥签名且重要性级别低于
IMPORTANCE_DEFAULT
的应用,其前台服务通知。
浮动通知
浮动通知以通知卡片的形式显示在屏幕顶部。由于浮动通知会吸引驾驶员的注意力,因此仅当信息对驾驶至关重要、时间敏感且可操作时才触发浮动通知。只有特定类别的通知才能触发浮动通知。
汽车制造商可以决定是否允许在通知中心打开时显示浮动通知。
应用如何触发浮动通知
应用触发浮动通知的要求因其是否具有系统特权而异。
- 具有系统特权的应用和使用平台密钥签名的应用
- 应用可以通过将通知渠道重要性设置为
IMPORTANCE_HIGH
或更高级别来触发浮动通知。 - 所有其他应用
应用可以通过将通知渠道重要性设置为
IMPORTANCE_HIGH
或更高级别,并确保通知属于以下类别之一来触发浮动通知:
浮动通知的生命周期
应用触发浮动通知后,通知会立即显示在汽车屏幕上。如果驾驶员不采取任何操作,浮动通知会在八秒后自动关闭,但以下情况除外:
某些来电的浮动通知无法关闭,浮动通知会一直保留,直到驾驶员接听电话或通话终止。要符合不可关闭的来电浮动通知的条件,通知必须满足以下要求:
- 属于
CATEGORY_CALL
- 设置全屏意图
- 使用
setOngoing()
方法标记为正在进行中
- 属于
如果应用在八秒的时间窗内更新通知,则浮动通知会保留。
当浮动通知被关闭时,通知会列在通知中心,除非它是 CATEGORY_NAVIGATION
通知。
适用于汽车的通知 API 变更和限制
本节总结了通知 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 |
空操作 | 不支持智能回复。 |