可以参考下面说明来分析音量大小相关的问题
- 调节音量的流程
(1)先要走到adjustStreamVolume(),其中很关键的code ,如下:
1422 int streamTypeAlias = mStreamVolumeAlias[streamType];
1423
1424 VolumeStreamState streamState = mStreamStates[streamTypeAlias];
1425
1426 final int device = getDeviceForStream(streamTypeAlias);
先获取到该streamtype的别名,再将该别名的device 获取到。
别名的来源是
STREAM_VOLUME_ALIAS_DEFAULT
根据streamtype 获取到的device,会不同。 getDeviceForStream()的结果总结如下:
Alias streamtype streamtype 插耳机
STREAM_VOICE_CALL STREAM_VOICE_CALL
STRAEM_RING STREAM_SYSTEM headphone
STRAEM_RING speaker
STRAEM_NOTIFICATION speaker
STRAEM_ENFORCED headphone
STRAEM_DTMF headphone
STRAEM_MUSIC STRAEM_MUSIC headphone
STRAEM_MUSIC STRAEM_TTS speaker
STRAEM_ALARM STRAEM_ALARM speaker
STRAEM_BLUETOOTH_SCO STRAEM_BLUETOOTH_SCO
= ( == ());(2) 然后会走到 setIndex() , 这个是设置音量到map 里去,每个streamtype 都会对应有一个index map,是存储volume index 的地方。
4442 final boolean currentDevice = (device == getDeviceForStream(mStreamType));
4443 final int numStreamTypes = AudioSystem.getNumStreamTypes();
4444 for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
4445 final VolumeStreamState aliasStreamState = mStreamStates[streamType];
4446 if (streamType != mStreamType &&
4447 mStreamVolumeAlias[streamType] == mStreamType &&
4448 (changed || !aliasStreamState.hasIndexForDevice(device))) {
4449 final int