AudioManager的getStreamVolume方法用于取得StreamVolume,代码如下:
//frameworks/base/media/java/android/media/AudioManager.java
public class AudioManager {
public int getStreamVolume(int streamType) {
final IAudioService service = getService();
try {
return service.getStreamVolume(streamType); //调用IAudioService的getStreamVolume方法
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}
调用IAudioService的getStreamVolume方法,IAudioService是一个接口由AudioService实现:
//frameworks/base/service/java/com/android/server/audio/AudioService.java
public class AudioService extends IAudioService.Stub
implements AccessibilityManager.TouchExplorationStateChangeListener,
AccessibilityManager.AccessibilityServicesStateChangeListener {
public int getStreamVolume(int streamType) {
ensureValidStreamType(streamType);
int device = getDeviceForStream(streamType); //通过streamType获取device ID
synchronized (VolumeStreamState.class) {
int index = mStreamStates[streamType].getIndex(device); //通过streamType和device ID获取Volume index
// by convention getStreamVolume() returns 0 when a stream is muted.
if (mStreamStates[streamType].mIsMuted) { //Stream状态为Mute状态
index = 0;
}
if (index != 0 && (mStreamVolumeAlias[streamType] == AudioSystem.STREAM_MUSIC) &&
isFixedVolumeDevice(device)) {
index = mStreamStates[streamType].getMaxIndex();
}
return (index + 5) / 10;
}
}
通过查询StreamStates数组,取得StreamVolume。