本部分详细介绍了如何自定义控制中心参考应用和界面。
用户流和界面
本部分介绍了用户流程以及如何启动控制中心。
启动控制中心
您可以通过应用启动器或系统界面导航栏上的图标启动控制中心。该图标仅显示在已启用后台可见用户的 build 中(如需了解详情,请参阅 UserHandleAware)。
您可以随时查看控制中心。控制中心由半透明窗口和透明背景组合而成,因此可以显示在任何其他应用之上,包括正在播放的视频和媒体内容。在应用的着陆页上:
- 屏幕排列以及本地和远程屏幕的使用。
- 填充了媒体和媒体控件的屏幕。
- 每个界面如何详细介绍媒体(及其他)控件。
屏幕的排列方式表示车辆中屏幕的布局。每个界面都是一个 DevicePickerScreen。如需自定义每个屏幕的位置和大小,请使用运行时资源叠加层 (RRO)。如需了解详情,请参阅在运行时更改应用资源的值。
对于打开控制中心的每个显示屏,系统会显示一个带有醒目突出显示边框的不同屏幕。这是本地屏幕,即正在使用的显示屏。
其他每个屏幕都是一个远程屏幕,用于表示汽车中的不同显示屏,您可以根据 Fragment 中屏幕的排列方式来识别这些显示屏。如需计算车辆中配置的乘员区域总数,请使用 CarOccupantZoneManager#getAllOccupantZones。
每个屏幕都定义了一个自定义属性 controlcenter:occupantZoneId,用于将数据与相应的乘员区域相关联。当媒体应用在特定显示屏上播放时,相应屏幕会显示媒体专辑封面。屏幕下方会显示播放(或暂停)按钮。
如果活跃的媒体应用是可见的任务(在控制中心后面打开),则位于播放按钮旁边的分享按钮会处于启用状态,以便打开镜像页面。共享可让您共享媒体应用显示内容,对于包含视频的媒体应用最为有用。
屏幕元素
点按屏幕会显示显示屏上播放的媒体的详细视图。 这称为详情界面。该视图显示媒体元数据,例如标题、播放进度和艺术家。这些按钮可提供对乘员区域的额外控制。
音频输出会显示正在播放媒体的音频输出设备,例如车内扬声器或耳机。音频输出:打开一个对话框,用于更改音频输出和媒体音量。
显示输入锁定会锁定屏幕输入。此操作无法应用于驾驶员屏幕。
显示屏电源会关闭屏幕电源。此操作无法应用于驾驶员屏幕。
当媒体是控制中心应用后面的可见任务时,“详细信息”视图会显示一个“分享”按钮,供用户点按。点按“分享”按钮会打开“镜像”页面:
开始“一起看”会话
镜像页面与使用 RRO 的着陆页类似。
如需添加屏幕以进行同步观看,请点按相应屏幕,然后点按完成。
这样做会打开一个 Mirroring Activity,其中托管着共享应用,并提供浮动式临时控件,以便您退出同步观看会话或重新进入镜像页面来添加或移除参与者。
摘要
下面总结了控制中心内的各个页面。
自定义准则
控制中心使用车载设备界面库进行自定义并提供基本主题和结构,可以按原样采用,也可以按照以下限制条件对其进行修改。
| 自定义 | 说明 |
|---|---|
| 应当 |
通过 RRO 调整整体主题背景和样式,例如:
|
| 可以 | 修改控制中心的高级界面结构。 |
控制中心是系统应用套件的一部分,该套件包括媒体、通知中心和应用启动器。这些应用共享在 AOSP 结构的不同级别定义的样式和资源:
framework/base/coreTheme.DeviceDefault,即专为供 OEM 用于自定义设备默认外观而设计的主题。packages/services/Car/car_product/overlay:Theme.DeviceDefault 的替换项,用于为 Android Automotive 生成 AOSP 式的外观和风格。OEM 可能会选择排除此叠加层,改用自己的叠加层。packages/apps/Car/libs/car-ui-lib:packages/apps/Car/libs/car-apps-common:packages/services/Car/car_product/overlay)。packages/apps/Car/MultiDisplay/ControlCenter:Theme.CarUi 的主题,该主题在 car-ui-lib 中定义。ControlCenterActivity 使用扩展 Theme.CarUi 的自定义 Theme.Transparent。为了支持某个流程(例如需要显示镜像任务的共同观看),控制中心会结合使用半透明窗口和透明背景,这样不会将应用发送到后台或发送 Lifecycle events。
<style name="Theme.Transparent" parent="@style/Theme.CarUi.NoToolbar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@color/transparent</item>
</style>