1. 程式人生 > >Android Audio 音訊輸出裝置切換

Android Audio 音訊輸出裝置切換

        首先呼叫class_create函式建立一個switch類,然後呼叫device_create函式建立一個switch類從屬裝置h2w,再通過呼叫device_create_file函式建立h2w裝置的名稱和狀態兩個屬性檔案,於是在檔案系統中便有了供使用者空間訪問的兩個節點“/sys/class/switch/h2w/name”和“/sys/class/switch/h2w/state”。一個專用中斷腳用於耳機插拔檢測,當耳機插入或拔出時觸發中斷,更新h2w狀態的變化並呼叫kobject_uevent_env函式傳送一組字串給Java框架層。Java框架層中啟動UEventThread執行緒用於輪詢並接收核心發上來的uevent資料。WiredAccessoryObserver繼承了UEventObserver,在系統啟動完成時便呼叫startObserving()啟動監聽h2w的狀態變化,當核心傳送上來的字串匹配成功後執行onUEvent()進行處理,onUEvent()最終會利用Intent機制傳送廣播訊息ACTION_HEADSET_PLUG。AudioService建立AudioServiceBroadcastReceiver例項並通過IntentFilter註冊監聽ACTION_HEADSET_PLUG,當接收到ACTION_HEADSET_PLUG後呼叫AudioSystem.setDeviceConnectionState()設定音訊裝置連線狀態,AudioSystem.setDeviceConnectionState()最終將呼叫到Audio硬體抽象層的AudioPolicyManager,通過音訊策略模組改變音訊輸出通道,從而實現揚聲器與耳機輸出切換。