Android_8.1插拔hdmi后,音量會(huì)變到最大

基本思想:android原生的思想,設(shè)置音量的時(shí)候,只會(huì)設(shè)置一個(gè)設(shè)備的音量下去,比如現(xiàn)在有speaker,hdmi,spdif三個(gè)輸出音頻設(shè)備,同時(shí)輸出的時(shí)候,按鍵只調(diào)整了speaker的音量值下去。修改方法就是把所有的設(shè)備都同步更新音量值,在AudioService.java中修改如下:

這里的mIndexMap.put會(huì)把各設(shè)備的音量值(index)保存在一個(gè)稀疏矩陣?yán)铩?/p>

在audioservice.java中,通過(guò)函數(shù)AudioSystem.setStreamVolumeIndex往jni下面調(diào)用的有好幾處,分別是:


而applyDeviceVolume_syncVSS也有好幾處調(diào)用它,分別是checkFixedVolumeDevices()和setDeviceVolume()。

由加log發(fā)現(xiàn)插拔hdmi變到最大音量,audiopolicymanager的接口函數(shù)拿到的是最大的音量值,所以上面?zhèn)鬟f下來(lái)的就是最大音量值,即上面截圖的index。通過(guò)加log發(fā)現(xiàn)插拔hdmi是checkFixedVolumeDevices()函數(shù)調(diào)用了AudioSystem.setStreamVolumeIndex();


而在這里有賦最大值的地方??隙ㄓ质莔FixedVolumeDevices搞得鬼,找到插拔函數(shù)里把hdmi設(shè)備給與上了,導(dǎo)致每次插拔HDMI音量都會(huì)變最大值。



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容