车载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);