android的音量按键属于系统级的按键响应,起始位置位于PhoneWindow.java的按键监听位置,如下图:
KEYCODE_VOLUME_UP,KEYCODE_VOLUME_DOWN和LEYCODE_VOLUME_MUTE分别为音量+、音量-和静音;
direction是一个标志位,调整的方向和类型。
设置好direction之后会调用MediaSessionLegacyHelper的sendAdjustVolumeBy方法传递进去,如下图:
然后调用SessionManager的dispatchAdjustVolume方法,如下图:
然后调用ISessionManager的dispatchAdjustVolume方法,如下图:
MediaSessionManager的构造函数调用了ServiceManager的Media Service,如下图:
从而转到AudioService中。
因为这里的代码写的不完全理的清楚,所以只跟踪了我需要的一部分。
在按键传递到这里之后,首先调用了setDeviceVolume方法,这个方法基本上就是设置音量的开始,上面的基本操作就是为了启动AudioService。
首先会调用一个StreamState对象的applyDeviceVolume_syncVSS方法,如下图:
这里传递给AudioSystem的setStreamVolumeIndex方法,如下图:
然后会调用到android_media_AudioSystem.cpp等,再往下窝就没看了~
我们这里调用的是adjustSuggestedStreamVolume方法,他会调用adjustStreamVolume方法,我们的音量设置就在这里具体实现。
而adjustStreamVolume中,我们主要是更改部分如下:
这里是设置默认按键一次更改的音量,我们更改为两格。每一格是10.
【注:再细分析可以看这篇文档】