目录

车载Android音频系统-AudioService

车载Android音频系统 AudioService

车载Android音频系统 AudioService


AudioService 是 Android 音频系统的核心服务类,该类的设计体现了异步消息处理(Handler 机制)、策略模式(音量/设备策略)和观察者模式(设备状态监听)等典型架构特点。主要功能可归纳为以下六大模块:

一、音量管理

1.多级音量控制

  • 管理 MAX_STREAM_VOLUME 数组定义各音频流(如音乐、铃声)的最大音量
  • 通过 VolumeStreamState 类实现流级别的独立音量控制(如 checkFixedVolumeDevices() 方法)
  • 支持安全音量逻辑(mSafeMediaVolumeIndex 变量控制安全阈值)

2.持久化存储

  • readPersistedSettings() 方法读取用户保存的音量设置
  • MSG_PERSIST_VOLUME 消息实现异步音量持久化

二、设备管理

1.连接状态跟踪

  • 使用 mConnectedDevices ArrayMap 存储已连接设备信息
  • makeDeviceListKey() 生成设备唯一标识(类型+地址)

2.设备路由策略

  • mFixedVolumeDevices 定义固定音量的设备类型(如 HDMI)
  • 处理蓝牙设备连接超时(BTA2DP_DOCK_TIMEOUT_MILLIS 常量)

三、音频焦点控制

  • MediaFocusControl 类实现焦点争夺机制
  • 通过 mPlaybackMonitor 监控播放活动状态

四、蓝牙音频处理

1.SCO 连接管理

  • 维护 mScoAudioState 状态机(如 SCO_STATE_ACTIVE_INTERNAL)
  • 处理 BluetoothHeadset 服务连接(getBluetoothHeadset() 方法)

2.编解码器支持

  • 管理 mEncodedSurroundMode 环绕声编码格式
  • sendEnabledSurroundFormats() 更新支持的格式

五、系统事件响应

1.生命周期管理

  • onBootPhase() 处理系统启动阶段事件
  • systemReady() 初始化完成后的系统准备

2.状态广播

  • 发送 ACTION_AUDIO_BECOMING_NOISY 等系统广播
  • 处理屏幕旋转事件(mMonitorRotation 标志)

六、特殊功能

1.无障碍支持

  • mAccessibilityServiceUids 跟踪无障碍服务 UID
  • 独立音量控制(sIndependentA11yVolume 标志)

2.低内存优化

  • readAndSetLowRamDevice() 根据设备配置优化资源
  • 典型代码特征举例:
// 音量设置异步持久化
sendMsg(mAudioHandler, MSG_PERSIST_VOLUME, SENDMSG_QUEUE, streamType, 0, device, 0);

// 蓝牙设备状态处理
private static final int BTA2DP_DOCK_TIMEOUT_MILLIS = 8000;
sendMessageDelayed(obtainMessage(MSG_BTA2DP_DOCK_TIMEOUT), BTA2DP_DOCK_TIMEOUT_MILLIS);