Android源码 更改系统音量

一、Android音量按键的传递流程:

android的音量按键属于系统级的按键响应,起始位置位于PhoneWindow.java的按键监听位置,如下图:

Android源码 更改系统音量_第1张图片

KEYCODE_VOLUME_UP,KEYCODE_VOLUME_DOWN和LEYCODE_VOLUME_MUTE分别为音量+、音量-和静音;

direction是一个标志位,调整的方向和类型。

设置好direction之后会调用MediaSessionLegacyHelper的sendAdjustVolumeBy方法传递进去,如下图:

Android源码 更改系统音量_第2张图片

然后调用SessionManager的dispatchAdjustVolume方法,如下图:

Android源码 更改系统音量_第3张图片Android源码 更改系统音量_第4张图片

然后调用ISessionManager的dispatchAdjustVolume方法,如下图:

Android源码 更改系统音量_第5张图片

 

MediaSessionManager的构造函数调用了ServiceManager的Media Service,如下图:

Android源码 更改系统音量_第6张图片

从而转到AudioService中。

 

二、AudioService中的具体执行:

因为这里的代码写的不完全理的清楚,所以只跟踪了我需要的一部分。

在按键传递到这里之后,首先调用了setDeviceVolume方法,这个方法基本上就是设置音量的开始,上面的基本操作就是为了启动AudioService。

Android源码 更改系统音量_第7张图片

首先会调用一个StreamState对象的applyDeviceVolume_syncVSS方法,如下图:

Android源码 更改系统音量_第8张图片

这里传递给AudioSystem的setStreamVolumeIndex方法,如下图:

Android源码 更改系统音量_第9张图片

然后会调用到android_media_AudioSystem.cpp等,再往下窝就没看了~

 

我们这里调用的是adjustSuggestedStreamVolume方法,他会调用adjustStreamVolume方法,我们的音量设置就在这里具体实现。

Android源码 更改系统音量_第10张图片

 

 

而adjustStreamVolume中,我们主要是更改部分如下:

Android源码 更改系统音量_第11张图片

这里是设置默认按键一次更改的音量,我们更改为两格。每一格是10.

【注:再细分析可以看这篇文档】

你可能感兴趣的:(android知识类)