音频配置 AAOS 标志

Android Automotive OS (AAOS) 使用标志和配置来实现不同的功能,包括动态路由和更通用的功能标志,例如汽车服务的音量控件。本文介绍了用于音频管理的当前 AAOS 配置标志。

标志 目的
audioUseDynamicRouting 在汽车服务配置文件中定义,用于启用 AAOS 路由。 此配置必须设置为 true。如果设为 false、路由和大部分 CarAudioService 将被停用,并且操作系统回退到配置音频政策中描述的默认行为。
audioUseCarVolumeGroupMuting 在汽车服务配置文件中定义,用于启用各个音量组的静音功能。如果设为 false(默认值),系统会停用单个音量组的静音功能。而静音功能会切换主静音设置。 如果设为 true,系统会启用汽车音量组静音功能,并可以单独将每个音量组静音。设置为 true 时,必须在音频控制 HAL 中实现音量组静音功能。
audioUseHalDuckingSignals 在汽车服务配置文件中定义,使 IAudioControl#onDevicesToDuckChange API 能够通知 HAL 何时闪避。设为 true(默认值)时,该 API 会收到指示要闪避哪些输出设备以及哪些使用行为持有焦点的信号。如果设为 false,系统不会调用该 API。除非音频控制 HAL 实现了闪避功能,否则不会调用该 API。
config_oemCarService 在汽车服务配置文件中定义,这是 OEM 自定义服务的组件名称。OEM 可以选择实现此服务,以针对不同的政策自定义汽车服务操作。如果 OEM 选择实现此组件,则必须实现一项服务来扩展由 car-lib 公开的 OemCarService,然后实现所需的组件服务。对于汽车音频服务来说,OEM 可以实现任何音频子服务来管理音频操作。如需了解详情,请参阅车载音频插件服务。 如果组件名称无效,CarService 将不会连接到任何 OEM 服务。组件名称不能是第三方软件包。它必须预安装。
audioVolumeAdjustmentContextsVersion

在汽车服务配置文件中定义,此配置可用于选择音量调整上下文优先级列表版本。

版本 1 包含所有音频上下文,顺序如下:

  • NAVIGATION
  • CALL
  • MUSIC
  • ANNOUNCEMENT
  • VOICE_COMMAND
  • CALL_RING
  • SYSTEM_SOUND
  • SAFETY
  • ALARM
  • NOTIFICATION
  • VEHICLE_STATUSEMERGENCY

版本 2 仅限于下列上下文,顺序如下。

默认版本为 1

  • CALL
  • MUSIC
  • ANNOUNCEMENT
  • VOICE_COMMAND
audioPersistMasterMuteState 在汽车服务配置文件中定义,此配置可用于保留全局静音状态。设为 true(默认值)时,Android 会在启动时恢复全局静音状态。当 audioUseCarVolumeGroupMutingtrue 时,不会影响静音更改的保留,因为静音更改是基于各个音量组。默认值设为 true;如果不应为设备保留主静音设置,则必须替换默认值。
audioVolumeKeyEventTimeoutMs

在汽车服务配置文件中定义,此配置可用于指示在音量键事件期间发生音量控件更改时,汽车音量组被视为有效的超时时间(以毫秒为单位)。此配置的使用方式如下:

  • 超时用于确定某播放(与播放的音频使用行为相关联的音频音量)在停止播放后是否仍可考虑进行自动音量选择。
  • 超时还可用作为更改用户正在调整的内容而进行自动音量调整所需的暂停时长。

默认值为 3000 毫秒,OEM 应进行调整以定制用户体验。

audioUseCarVolumeGroupEvent 在汽车服务配置文件中定义,此配置可用于对音量组启用回调事件。设为 true 时,客户端会通过 ICarVolumeGroupEvent 收到对影响音量组的事件的回调。启用此设置后:

  • 我们强烈建议供应商也支持使用 IAudioControl#setModuleChangeCallbackIAudioControl#registerGainCallback 来处理事件和音频硬件更改。
  • 如果 CarVolumeCallbackCarVolumeGroupEventCallback 都由同一应用注册,则音量组索引和音量组静音回调经过 CarVolumeGroupEventCallback。 因此,我们强烈建议所有应用都迁移到新的回调接口,以确保性能保持一致。
  • 默认值为 false。 我们建议您将此值设为 true,因为支持旧版音量回调的 API 已废弃,并将很快完全移除。

config_useFixedVolume frameworks/base/core/res/res/values/config.xml 中定义。必须设置为 true,才能允许车载音频服务管理音量控制。如果 config_useFixedVolume 标志未设置或设为 false(默认值),应用可以调用 AudioManager 音量管理 API,并在软件混音器中按音频流类型更改音量。用户可能不希望出现这种情况,因为这会对其他应用带来潜在影响,而且使用硬件放大器接收信号时,软件混音器中的音量衰减会导致信号中的可用有效位减少。尚未配置并设置为 true 的新设备会通过 AudioManager 音量和静音 API 接收音量变化。
config_handleVolumeKeysInWindowManager frameworks/base/core/res/res/values/config.xml 中定义,必须设置为 true,以便汽车音频服务拦截音量键事件。如果设置为 false(默认值),音量键事件可转发到前台应用,并且可能会导致汽车音频服务之外的音量键事件管理出现不好的结果。

汽车音频服务配置

在 Android 13 之前,汽车服务配置由 packages/services/Car/service/res/values/config.xml 文件的产品配置叠加层覆盖(如需了解详情,请参阅利用资源叠加层自定义 build)。

PRODUCT_PACKAGE_OVERLAYS := <path_to_overlay>

配置文件从 <path_to_overlay> 到实际位置的位置应包含 packages/services/Car/service/res/values/

汽车服务 RRO

从 Android 13 开始,AAOS 支持运行时资源叠加层。可以使用 RRO 更改汽车音频配置的值。例如,请在 device/google/cuttlefish/shared/auto/rro_overlay/ 中查看汽车 cuttlefish RRO 参考文档。audioUseDynamicRouting 配置在 device/google/cuttlefish/shared/auto/rro_overlay/CarServiceOverlay/res/values/config.xml 中被替换。

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
...

资源叠加层地图包含在 device/google/cuttlefish/shared/auto/rro_overlay/CarServiceOverlay/res/xml/overlays.xml 中:

<overlay>
...
  <item target="bool/audioUseDynamicRouting"
value="@bool/audioUseDynamicRouting" />
...
</overlay>

device/google/cuttlefish/shared/auto/rro_overlay/CarServiceOverlay/AndroidManifest.xml 中定义的资源叠加层清单包含设置为 com.android.car.updatabletargetPackage

如需了解详情,请参阅以下资源:

启用了功能的 API

如果在设备上启用了相应功能,该方法会返回 true,否则返回 false。在 CarAudioManager#isAudioFeatureEnabled API 中,传入的参数必须是以下其中一项:

  • AUDIO_FEATURE_DYNAMIC_ROUTING
  • AUDIO_FEATURE_VOLUME_GROUP_MUTING
  • AUDIO_FEATURE_OEM_AUDIO_SERVICE
  • AUDIO_FEATURE_VOLUME_GROUP_EVENTS
  • AUDIO_FEATURE_AUDIO_MIRRORING