Android的framework层音量控制原理分析--hot(key)处理
Android.media.AudioManager中包含了对android.media.AudioService的跨进程AIDL调用封装。
正常处理过程:
1.调整音量是通过AudioManager间接调用AudioService.adjustStreamVolume方法来完成逻辑处理;
2.AudioService调用VolumePanel画出音量调整界面,并发送音量变动广播消息,
3.StatusBarPolicy,接收广播消息判断是否在状态栏显示静音或振动图标。
问题点:
1.AudioManager如何接收音量调整事件?
答:PhoneWindowManager.interceptKeyBeforeQueueing处理的
WindowManagerService循环读取下面的消息再做分发到窗口接收,在消息分发前会有一个类做消息过滤处理,就是PhoneWindowManager.interceptKeyBeforeQueueing;
比如音量调整、Home键都在这个类里面做特殊处理,详细内容后面会在其它该当再补充
2.谁负责处理音量显示的?
答:AudioManager调用AudioService来显示的。事件触发在AudioManager,代码的执行实现在AudioService中。状态栏是SystemUI的APK包StatusBarPolicy中接收广播消息来处理的。
源码位置ÿ