1. 類介紹
AudioDeviceInventory
是 Android 音頻系統中的一個核心類,位于 frameworks/base/services/core/java/com/android/server/audio/
路徑下。它負責 管理所有音頻設備的連接狀態,包括設備的添加、移除、狀態更新以及策略應用。
- 設備連接狀態管理:記錄所有已連接的音頻設備(如藍牙耳機、有線耳機、USB設備等)。
- 設備策略協調:處理設備優先級、路由策略(如 A2DP 和 LE Audio 的切換)。
- 與 AudioPolicyManager 交互:通過
AudioSystem
接口通知底層音頻策略管理器(APM)設備狀態變化。 - 廣播設備狀態變更:發送系統廣播(如
ACTION_AUDIO_BECOMING_NOISY
)通知應用設備變化。
2. 核心功能
(1) 設備連接狀態管理
- 設備類型:支持多種設備類型(如
DEVICE_OUT_BLUETOOTH_A2DP
、DEVICE_OUT_WIRED_HEADSET
等)。 - 設備信息存儲:通過
DeviceInfo
類存儲設備的類型、地址、名稱、編解碼格式等信息。 - 連接/斷開處理:
- 連接:調用
AudioSystem.setDeviceConnectionState()
通知底層設備可用。 - 斷開:移除設備并通知底層,處理延遲斷開(如藍牙設備淡出)。
- 連接:調用
(2) 音頻路由策略
- 藍牙設備優先級:協調 A2DP、LE Audio、HFP 等藍牙配置的切換(如
updateBluetoothPreferredModes_l
)。 - 策略應用:通過
setPreferredDevicesForStrategy()
設置設備優先級(如音樂播放優先使用 A2DP)。
(3) 事件通知
- 系統廣播:發送
ACTION_AUDIO_BECOMING_NOISY
(當耳機拔出時通知應用暫停播放)。 - 內部回調:通過
IAudioRoutesObserver
通