Android Framework 之 AudioDeviceBroker
一、核心定位与架构位置
-
路径
base/services/core/java/com/android/server/audio/AudioDeviceBroker.java
-
层级关系
- 上承:
AudioService
(音频总控服务) - 下接:
AudioSystemAdapter
(音频系统操作代理)
- 上承:
二、核心职责与功能
-
音频设备生命周期管理
- 动态感知:监控设备插拔事件(耳机、USB声卡、蓝牙等)
- 状态维护:通过
mDeviceList
实时记录设备连接状态 - 路由决策:基于优先级自动切换输出设备(如耳机插入时从扬声器切到耳机)
-
跨设备协调
方法 作用场景 setWiredDeviceConnectionState()
处理有线设备(耳机/USB)连接事件 setBluetoothA2dpDeviceConnectionState()
A2DP蓝牙音乐设备状态同步 setBluetoothHfpDeviceConnectionState()
蓝牙通话设备状态同步 -
策略强制执行
setForceUse()
:强制指定音频使用路径(如通话强制走扬声器)- 示例场景:车载模式下导航音强制从汽车音响输出
-
全局状态协调
- 维护三大核心数据集:
mDeviceList
:当前活跃设备列表mRoutes
:音频路由策略配置mAudioPolicies
:系统级音频策略规则
- 维护三大核心数据集:
三、关键协作组件
-
AudioSystemAdapter
- 功能代理:封装对底层音频系统的原子操作
// 示例:设置音量 audioSystemAdapter.setStreamVolume(STREAM_MUSIC, volume, flags);
- 操作范围:
- 音量/静音控制
- 音频均衡器调节
- 输入/输出设备切换
- 功能代理:封装对底层音频系统的原子操作
-
AudioDeviceInventory
- 设备清单管理:
List<AudioDeviceInfo> devices = audioDeviceInventory.getDevices();
- 功能:
- 枚举当前输入/输出设备
- 校验设备兼容性(如采样率支持)
- 处理设备热插拔事件队列
- 设备清单管理: