下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、當(dāng)按鍵按下時(shí),底層上報(bào)事件 給 KeyguardUpdateMonitor ,窗口管理 器 WindowManager, 從KeyguardUpdateMonitor 獲取具體按鍵信息,如果是 Volume +/-則直接由 AudioMa nager.jav a 處理,調(diào)用方 法 adjustSuggestedStreamVolume ,其參數(shù) direct ion包括 ADJUS_LOWER(-鍵)、ADJUS_RAISE( + 鍵)、ADJUS_SANE (不調(diào)整), suggestedStreamType為音頻流類型,flags 為特殊標(biāo)志位,下面會(huì)講到。adjustSuggestedS
2、treamVolume 方法內(nèi)直接通過 IAudioService 獲取 framework 層的 AudioService 服務(wù),AudioServic e 針對(duì)強(qiáng)制使用某種音頻,通過 AudioSystem 的 JNI 從 HAL層獲取狀態(tài),并進(jìn)行切換,再執(zhí)行 adjustMasterVolum e / adjustSuggestedStreamVolume方法,方法內(nèi)部 處理了 STREAM_REMOE_MUSIC 和非 REMOT_MUSIC 的音量調(diào)整,STREM_REMOE_MUSIC 是在當(dāng)后臺(tái)播放音樂時(shí),不在前臺(tái)運(yùn)行的情況。adjustSuggestedStreamVolume
3、 先對(duì)當(dāng)前 strea m 獲取在執(zhí)行的 streamtyp e 類型,包括通話 狀態(tài)收音機(jī)播放,音樂播放等,此處需要 hal 層獲取 streamtyp e,得到 streamtyp e 后如果是 STREAM_REMOT_MUSIC 將清楚 flags 中的標(biāo)志 FLAG_PLAY_SOUNDFLAG_FIXED_VOLUM等。STREAM_REMOT_MUSIC 類型繼續(xù)執(zhí)行 adjustRemoteVolum e, 否則執(zhí)行 adjustStreamVolume, 這里主要進(jìn) 入 adjustStreamVolum e 方法。 在 adjustStreamVolum e 方 法 內(nèi)檢查
4、 SafeMedaiVolume在 插 耳 機(jī) 情況 下 需 提 示 , 如 果streamtypealias 為STREAI_MUSIC 且 設(shè) 備 類 型 包括DEVICE_OUT_AUX_DIGITAL,將添加 flags 標(biāo)志位:flags |= AudioManage r.FLAG_FIXED_VOLUM固定不能調(diào)節(jié)音量的設(shè)備包括:final int mFixedVolumeDevices =AudioSystem. DEVICE_OUT_AUX_DIGITALAudioSystem.DEVIC E_OUT_DGT_DO(K_HEADSET AudioSystem.DEVICE_OU
5、T_ANG_DO(K_HEADSET AudioSystem.DEVIC E_OUT_ALL_US;BDEVICE_OUT_AUX_DIGITAL 是針對(duì) HDM 類型。最后,sendVolumeUpdate 直 接調(diào)用 mVolumePane.postVolumeChanged(streamTyp e, flags )設(shè)定并顯示進(jìn)度條,VolumePa nel 內(nèi)部會(huì)根據(jù) flags 標(biāo)志是否包含 FLAG_FIXED_VOLUM,設(shè)定進(jìn)度條sc.seekbarView.setEnable d(false / tru e),VolumePanel 內(nèi)會(huì)有個(gè) dialo g 顯示。至此,上層的
6、調(diào)用過程結(jié)束。在 HAL 策略上只需修改一處 ,AudioPolicyManager 的 computeVolume 方法,修改如下: 修改前:i f (strea m = AudioSystem :MUSIC &index != mStreamsstrea m.mIndexMin &(devic e = AUDIO_DEVIC_OUT_AUX_DIGITALdevic e = AUDIO_DEVICE_OUT_DGLT_DO(K_HEADSET devic e =AUDIO_DEVICE_OUT_USB_ACCESSO|RY devic e =AUDIO_DEVICE_OUT_USB_DEV
7、E) retur n 1.0;修改后:i f (strea m = AudioSystem :MUSIC &index != mStreamsstrea m.mlndexMin &(/devic e = AUDIO_DEVIC_OUT_AUX_DIGITAI|devic e = AUDIO_DEVICE_OUT_DGT_DO(K_HEADSETdevic e = AUDIO_DEVICE_OUT_USB_ACCESSO|RYdevic e = AUDIO_DEVICE_OUT_USB_DEVEC) retur n 1.0;具體流程如何走到這里。對(duì)輸出策略的管理上,在 插 HDM 時(shí)于桌面調(diào)整音
8、量,默認(rèn)不使用 HDM 輸出,因?yàn)樵谳敵鲈O(shè)備判斷上有操作:i f (devic e2 = AUDIO_DEVICE_NOE) & (strateg y != STRATEG_SONIFICATION) / n osonificatio non aux digital (e.g . HDM)devic e2 = mAvailableOutputDevices & AUDIO_DEVIC_OUT_AUX_DIGITALSTRATEG_SONIFICATION 為在桌面時(shí)調(diào)整的聲音所使用的類型,每當(dāng)調(diào)整音量時(shí),通過Ton eGe nerator初始化構(gòu)造對(duì)應(yīng)音頻流 的Ton eGe nerator桂
9、香, 借助AudioFli nge r建立 AudioTrack 實(shí)例,在 AudioFlinge r 內(nèi)部會(huì)對(duì)音頻流類型設(shè) 置 AudioTrac k 的參數(shù)。建立 AudioTrac k 后設(shè)置優(yōu)先級(jí)為 1 并調(diào)度運(yùn)行該線程(叫線程是因?yàn)?AudioTrac k 繼承 threa d本分,可查看類繼承)。一旦調(diào)度 startTone 時(shí),AudioTrac k start,經(jīng)過 AudioFlinge r start 進(jìn)行數(shù)據(jù)處理,最后通 過 AudioService 調(diào)用 AudioPolicyManager ,從 startoutput - getNewDevic e -setOutp
10、utDevice - setOutputDevice - checkAndSetVolume - getNewDevic e - getNewDevic e等,具體可查 看 log :Ton eGe nerator : Ton eGe nerator con structor: streamTyp e=2, volum e=0.011220AudioTrac k: audiotrac k 0 x58ba9540 set Typ e 2, rat e 0, fmt 1, chn 1, fen t 0, fla g 4 AudioFlinge r:createTrack () sessionld
11、: 0AudioFlinge r: createTrack () lSessionl d: 26AudioFlinge r: AUDIO_OUTPULFLA3_FAST denie d: isTimed =0 sharedBuffe r=0 x0 frameCount=OmFrameCount=2048 forma t=1 isLinea r=1 channelMask =0 x1 sampleRat e=44100mSampleRate=44100 hasFastMixe r=0 tid =2176 fastTrackAvailMas k= 0 xfedalvikv m: threadi d
12、=81: in ter p stack a t 0 x566c5000 AudioTrac k: sched_setschedule r t o r t, priorit y:1AudioFlinge r: Track constructor nam e 4099, calling pid519AudioFlinge r: acquiring 26 fro m 519AudioFlinge r: added new entry for26Ton eGe nerator : startT oneAudioTrac k: start 0 x58ba9540AudioFlinge r: start
13、(4099), calling pid 519 session 26AudioFlinge r: ? = ACTIVE (4099) o n threa d 0 x41 7afb 70delayMs = 0 force = 0AudioPolicyManager : getNewDevic e() STRATEG_SONIFICATION selecte d devic e 2 outpu t= 2AudioPolicyManager : getNewDevic e() selecte d devic e 2 outpu t= 2AudioFlinge r: mWaitWorkCV.broad
14、castAudioFlinge r: threa d 0 x4179f 050 typ e 0 TID 447 wakin g u p這里會(huì)在getNewDevice 時(shí)獲取輸出設(shè)備,會(huì)進(jìn)入策略方法進(jìn)行判斷,需要去掉STRATEG_SONIFICATION 部分限制,如下:i f (devic e2 = AUDIO_DEVI(E_NOIE) & (strateg y != STRATEG_SONIFICATION)/ n o sonificatio non aux digital (e.g . HDM)devic e2 = mAvailableOutputDevices & AUDIO_DEV
15、IC_OUT_AUX_DIGITAL以上從策略層進(jìn)行修改,另一種方法是從framework 進(jìn)行修改,從 VolumePanle 中修改StreamResources 中的值:VoiceStream(AudioMa nager.STREAM_VOICE_CALL,R.stri ng.volume_ic on _descripti on_in call,R.drawable.ic_audio_pho ne,R.drawable.ic_audio_pho ne,false)為,VoiceStream(AudioMa nager.STREAM_MEDIA,R.stri ng.volume_ic on
16、 _descripti on_in call,R.drawable.ic_audio_pho ne,R.drawable.ic_audio_pho ne,false)但第二種修改不適合帶modem 功能的設(shè)備,第二種修改也就是直接將通話改為多媒體類型。:startOutput () outpu t 2, strea m 2, session 26:getNewDevic e() STRATEG_SONIFICATICN selecte d devic e 2 outpu t=AudioPolicyMa nagerAudioPolicyMa nager2AudioPolicyMa nagerAudioPolicyMa nagerAudioPolicyMa nager=2 delayMs = 0AudioPolicyMa nageroutpu t 2AudioPolicyManager : checkAndSetVolume strea m = 2 inde
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度校園綠化工程分包合同4篇
- 2025年水電班組勞務(wù)合同樣本:水電施工與維護(hù)服務(wù)合同6篇
- 二零二五年度活動(dòng)策劃與現(xiàn)場(chǎng)協(xié)調(diào)執(zhí)行合同范本3篇
- 2025年度旅游單項(xiàng)服務(wù)售后服務(wù)合同4篇
- 2025年度運(yùn)動(dòng)場(chǎng)塑膠地板鋪設(shè)與運(yùn)動(dòng)器材配套合同范本3篇
- 2025年度煤炭運(yùn)輸合同保險(xiǎn)理賠流程規(guī)范4篇
- 二零二五年度餐飲連鎖品牌股東合作協(xié)議3篇
- 二零二五年度集體所有制住宅產(chǎn)權(quán)變更與物業(yè)管理委托合同3篇
- 二零二五年版環(huán)保項(xiàng)目資金借款合同模板3篇
- 2025年樹木清理與生態(tài)環(huán)境整治工程合同3篇
- 軟件項(xiàng)目應(yīng)急措施及方案
- 2025河北邯鄲經(jīng)開國(guó)控資產(chǎn)運(yùn)營(yíng)管理限公司招聘專業(yè)技術(shù)人才5名高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年民法典知識(shí)競(jìng)賽考試題庫(kù)及答案(共50題)
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè) 期末綜合卷(含答案)
- 鈑金設(shè)備操作培訓(xùn)
- 感染性腹瀉的護(hù)理查房
- 中考英語688高頻詞大綱詞頻表
- 九年級(jí)初三中考物理綜合復(fù)習(xí)測(cè)試卷3套(含答案)
- 管理制度評(píng)價(jià)表(填寫模板)
- 工地設(shè)計(jì)代表服務(wù)記錄
評(píng)論
0/150
提交評(píng)論