人机界面概览

Android Automotive是随 Android 开源项目 (AOSP) 提供的车载信息娱乐平台解决方案。本主题中的文章介绍了 Android Automotive System UI 提供的关键概念和组件以及为 OEM、第三方开发人员和最终用户构建有效的人机界面 (HMI) 系统所需的核心应用程序。

  • AOSP 主机集成指南。 App Host 允许 3P 汽车应用代表其呈现 OEM 风格的用户界面 (UI) 组件。
  • 汽车设置结构。 Car Settings 提供以汽车为中心的视觉用户界面、基本的驾驶员分心优化以及 OEM 的额外定制入口点。
  • 汽车 UI 库集成指南 Car UI Library 提供了一个 UI 开发框架,使汽车中存在的所有应用程序能够实现一致性和定制化。
  • 自定义状态栏系统图标状态栏是 Android 系统 UI 的一个组件,用于持续向用户显示重要信息。了解如何自定义状态栏系统图标。
  • 单挑通知了解如何自定义提醒通知。
  • 拨号器使用此 Android 系统应用程序为蓝牙通话、联系人浏览和通话管理实现分心优化 (DO) 体验。
  • 媒体只需几个设置和一项服务,开发人员就可以扩展现有的媒体应用程序。虽然应用程序必须遵守汽车媒体模板,但开发人员可以自定义模板颜色、字体、图标等,以创建品牌体验。
  • 通知了解如何更改通知的外观和配置。

术语

这些术语在 HMI 和相关文章中使用:

学期定义
核心应用对系统功能至关重要的一组关键应用程序,包括设置、收音机、HVAC、媒体、拨号器和键盘。
兼容性定义文档 (CDD)枚举设备必须满足的要求才能与最新版本的 Android 兼容。
兼容性测试套件 (CTS)免费的商业级测试套件,可在兼容性测试套件下载处下载
定制修改 AOSP 实施以满足 OEM 要求的练习。通常,这涉及使用资源覆盖来应用外观更改,同时还要确保符合 CDD、CTS 和所有相关的用户体验指南。
英雄应用一组对 Android 的各个方面都至关重要的关键应用程序,包括功能、可升级性、第三方开发者生态系统和最终用户。英雄应用程序包括通知、设置、媒体和通讯中心/拨号器。相应的 AOSP 实施应具有生产质量。
资源叠加要影响用户界面的呈现,请使用此机制在编译时(最常见)或运行时(运行时资源覆盖 (RRO))替换颜色、更改尺寸、启用绘图和应用布局资源。
系统界面属于系统的应用程序之外的用户界面,例如导航栏、状态栏、锁屏和音量对话框。
主题一组颜色和样式,用于确定继承主题的组件和应用程序的外观。
用户体验 (UX)用户界面 (UI) 设计领域及其可用性。

定制

系统 UI 和其他核心系统应用程序的 AOSP 实现为启动 HMI 开发过程奠定了坚实的基础。修改 AOSP 实施(主要通过使用资源覆盖)以满足 OEM 的品牌、业务和法律要求的做法称为定制

虽然整个系统的设计和构建是灵活的,但预计不同的组件将在不同程度上进行定制:

  • 系统用户界面。 OEM 可以在 CDD 和 CTS 以及任何其他适用的 UX 指南提供的范围内自定义或替换 AOSP 实施。

  • 非英雄系统应用程序(也称为参考 。 OEM 可以自定义或替换 AOSP 实施。

  • 英雄应用。每个应用程序都附带一套详细的自定义指南。强烈建议 OEM 使用 AOSP 实施,然后在这些指南提供的范围内对其进行定制。

密度配置

为了确保在给定物理显示配置的情况下正确呈现 UI 元素,必须将 density 属性设置为与物理密度最匹配的存储桶( Display Metrics ),例如构建文件中的此条目:

PRODUCT_PROPERTY_OVERRIDES := \
        ro.sf.lcd_density=160

UX 限制引擎

CarUxRestrictionsManager为应用程序提供了一个挂钩来监听与驾驶状态相关的变化,从而适当地修改用户体验。 OEM 可以覆盖packages/services/Car/service/res/xml/car_ux_restrictions_map.xml中的配置文件以影响系统的行为。

系统主题

规定系统范围的默认项目集(例如颜色和文本样式)的主题是DeviceDefault 。鼓励 OEM 通过修改 DeviceDefault 主题来启动整体定制过程。默认情况下,系统 UI 和 AOSP 中的所有系统应用程序都继承自该主题。还鼓励 OEM 开发的系统应用继承 DeviceDefault。第三方开发的应用程序不应继承 DeviceDefault,而是使用androidx.car库中提供的androidx.car 。文件位置如下:

  • 核心/frameworks/base/core/res/res/values/themes_device_defaults.xml
  • 颜色/frameworks/base/core/res/res/values/colors_car.xml
  • 样式/frameworks/base/core/res/res/values/styles_car.xml
  • 汽车覆盖。
    /packages/services/Car/car_product/overlay/.../values/themes_device_defaults.xml

OEM 预计将在其供应商目录中具有与car_product目录并行的覆盖结构,从而进一步扩展car_product覆盖。

主题游乐场应用

此应用程序通过在一个地方可视化所有主题属性来简化自定义DeviceDefault主题的过程。此外,通过比较某些样式在此应用中与其他系统应用的呈现方式,开发人员可以快速调试主题问题。此应用程序可在以下位置获得:

  /packages/services/Car/tests/ThemePlayground

系统界面

系统 UI 包括/frameworks/base下的所有 UI,主要位于/frameworks/base/packages/CarSystemUI中。这包括导航栏、状态栏、锁定屏幕、音量对话框、toast、用户选择器和权限对话框。 OEM 可以通过资源覆盖和主题广泛地自定义系统 UI 组件,前提是每个组件都符合 CDD、CTS 和其他适用的 UX 指南的要求。

系统应用

Android Automotive 包括一组对整体系统功能至关重要的核心系统应用程序。其中,通信中心、媒体、通知和设置被视为英雄应用程序。

  • 交流中心
  • 暖通空调
  • 输入法(键盘)
  • 启动器(主屏幕)
  • 本地媒体播放器
  • 媒体
  • 信使
  • 通知
  • 收音机
  • 设置

主屏幕

主屏幕,称为汽车启动器,是 HMI 体验的登录页面。 AOSP 实施仅供参考,OEM 预计会用他们自己的实施来替换实施,这通常会根据需要结合导航、媒体播放、通信和其他系统状态。通常,Car Launcher 应用程序会显示系统上可用的应用程序。要了解如何处理最近、包更改和无头(无启动器活动)应用程序等事件,请参阅参考实现。

通知

通知是 Android 操作系统的一个组成部分,并且相同的结构(包括提示通知、通知列表/中心、通知 API、排名和内联操作)已包含在 Android Automotive 中。有关详细信息,请参阅手持设备通知概述。为了优化汽车用例,进行了以下修改(与手持通知堆栈相比):

  • 减少用户可见的整体通知内容。从通知列表/中心删除正在进行的媒体播放、正在进行的导航和系统应用程序的“不重要的”(LOW 及以下的重要性)前台服务通知,并理解这些通知要么是多余的(例如,集群显示媒体状态) ) 或没用。

  • 删除复杂的上下文控件(例如长按和基于滑动长度的控件)。

  • 尊重 UX Restrictions 引擎配置。

    • 可以根据驱动器状态隐藏消息通知内容预览。
    • 所有字符串都以最大长度封顶。
  • 在 Android 9 中添加了专门针对汽车的新通知类别,仅适用于以android.uid.system运行的捆绑系统应用程序。

  • CATEGORY_CAR_EMERGENCY 。排名在通知列表的顶部。绕过请勿打扰 (DND) 控制。

  • CATEGORY_CAR_WARNING 。排名低于紧急情况,高于其他(绕过免打扰)。
  • CATEGORY_CAR_INFORMATION 。根据“重要性”和新近度与其余通知排名。

通知堆栈的端到端实现,从通知 API 到 UI,被认为是英雄应用程序。为了保证所有 HU 之间一致的 API 互操作性并最大限度地提高可升级性,强烈建议 OEM 采用 AOSP 实施,然后对其进行轻松定制。

定制

标准的 DeviceDefault 主题和资源覆盖适用。数量非常有限的行为自定义旋钮可在以下位置获得:

packages/apps/Car/Notification/res/values/config.xml

设置

设置应用程序(汽车设置)是公开旋钮的主要应用程序之一,用户可以使用它来配置 Android 操作系统的各个方面和汽车的其余部分。设置应用程序公开了操作系统中的 200 多项功能,这些功能与每个主要的 Android 版本紧密结合。为了实现可升级性并避免碎片化,强烈建议 OEM 采用 AOSP 实施,然后对其进行定制(而不是分叉实施)。

定制

设置应用程序将自定义考虑在内,并提供了多种自定义途径。

  • 主题化。启用每个 Preference 对象类型的呈现方式的可视化自定义,包括:

    • Preference.DeviceDefault.CheckBoxPreference

    • Preference.DeviceDefault.DialogPreference.EditTextPreference

  • 层次结构定制。要启用:

    • 启动到任意根片段,在名为Settings/res/values/config.xml的文件中覆盖config_settings_hierarchy_root_fragment的值

    • 订单、分组、文字、图标等项目的自定义,覆盖Settings/res/xml/*.xml

  • 静态注入。在设置覆盖项目时,OEM 可以通过定义并将额外的 Fragment 和 Controller 类添加到层次结构中来添加专有屏幕。

  • 动态注入。如果一个单独的应用程序 ( apk ) 托管一个必须从主设置应用程序链接的设置屏幕,则可以动态注入单独的应用程序。有关详细信息,请参阅动态首选项

媒体

Media 是一个英雄应用程序,它代表实现MediaSessionMediaBrowser API 的媒体应用程序提供前端用户体验。媒体应用程序可以是第三方应用程序(例如 Spotify 和 Pandora)以及其他媒体源,例如蓝牙 (BT) 流媒体和本地媒体。

Android Auto ( Projection ) 中提供了数百个媒体应用程序,所有这些应用程序都实现了这些媒体 API,如为 Auto 提供音频播放中所述。媒体 API 会随着每个主要的 Android 版本和Androidx库的发布而发展。为保证所有媒体应用程序和未来 Android 版本之间的 API 互操作性,强烈建议 OEM 采用 AOSP 实施,然后对其进行定制。

定制

通过 DeviceDefault 主题的标准主题也适用于媒体。此外,如果自定义在 UX 指南的范围内,则可以通过资源覆盖进一步自定义外观。

其他媒体应用

USB 媒体和媒体源

在可能的范围内,强烈建议通过MediaSessionMediaBrowser API 的实现将这些媒体源插入到媒体(任何第三方媒体应用程序都是如此)。请参阅 AOSP 中的 LocalMediaPlayer 应用程序。此应用程序显示本地媒体文件并在媒体中显示为源。