资源描述:
《android音量调整流程+hdmi音量控制修改》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、当按键按下时,底层上报事件给KeyguardUpdateMonitor,窗口管理器WindowManager,从KeyguardUpdateMonitor获取具体按键信息,如果是Volume+/-则直接由AudioManager.java处理,调用方法adjustSuggestedStreamVolume,其参数direction包括ADJUST_LOWER(-键)、ADJUST_RAISE(+键)、ADJUST_SAME(不调整),suggestedStreamType为音频流类型,flags为特殊标志位,下面会讲到。adjustSuggestedSt
2、reamVolume方法内直接通过IAudioService获取framework层的AudioService服务,AudioService针对强制使用某种音频,通过AudioSystem的JNI从HAL层获取状态,并进行切换,再执行adjustMasterVolume/adjustSuggestedStreamVolume方法,方法内部处理了STREAM_REMOTE_MUSIC和非REMOTE_MUSIC的音量调整,STREAM_REMOTE_MUSIC是在当后台播放音乐时,不在前台运行的情况。adjustSuggestedStreamVolume先
3、对当前stream获取在执行的streamtype类型,包括通话状态收音机播放,音乐播放等,此处需要hal层获取streamtype,得到streamtype后如果是STREAM_REMOTE_MUSIC,将清楚flags中的标志FLAG_PLAY_SOUND、FLAG_FIXED_VOLUME等。STREAM_REMOTE_MUSIC类型继续执行adjustRemoteVolume,否则执行adjustStreamVolume,这里主要进入adjustStreamVolume方法。在adjustStreamVolume方法内检查SafeMedaiVol
4、ume在插耳机情况下需提示,如果streamtypealias为STREAM_MUSIC,且设备类型包括DEVICE_OUT_AUX_DIGITAL,将添加flags标志位:flags
5、=AudioManager.FLAG_FIXED_VOLUME固定不能调节音量的设备包括:finalintmFixedVolumeDevices=AudioSystem.DEVICE_OUT_AUX_DIGITAL
6、AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET
7、AudioSystem.DEVICE_OUT_ANLG_DOCK_HEADS
8、ET
9、AudioSystem.DEVICE_OUT_ALL_USB;DEVICE_OUT_AUX_DIGITAL是针对HDMI类型。最后,sendVolumeUpdate直接调用mVolumePanel.postVolumeChanged(streamType,flags)设定并显示进度条,VolumePanel内部会根据flags标志是否包含FLAG_FIXED_VOLUME,设定进度条sc.seekbarView.setEnabled(false/true),VolumePanel内会有个dialog显示。至此,上层的调用过程结束。在HAL策略上只需
10、修改一处,AudioPolicyManager的computeVolume方法,修改如下:修改前:if(stream==AudioSystem::MUSIC&&index!=mStreams[stream].mIndexMin&&(device==AUDIO_DEVICE_OUT_AUX_DIGITAL
11、
12、device==AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET
13、
14、device==AUDIO_DEVICE_OUT_USB_ACCESSORY
15、
16、device==AUDIO_DEVICE_OUT_USB_DEVICE)){retu
17、rn1.0;}修改后:if(stream==AudioSystem::MUSIC&&index!=mStreams[stream].mIndexMin&&(//device==AUDIO_DEVICE_OUT_AUX_DIGITAL
18、
19、device==AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET
20、
21、device==AUDIO_DEVICE_OUT_USB_ACCESSORY
22、
23、device==AUDIO_DEVICE_OUT_USB_DEVICE)){return1.0;}具体流程如何走到这里。对输出策略的管理上,在插HDMI时于
24、桌面调整音量,默认不使用HDMI输出,因为在输出设备判断上有操作:if((dev