有时候音量并不需要单独调节,需要统一调节。通过修改一下几个地方即可达到目的:
一、在AudioManager.java中的修改,android/frameworks/base/media/java/android/media/AudioManager.java
1、修改DEFAULT_STREAM_VOLUME字段中,默认音量为一致
public static final int[] DEFAULT_STREAM_VOLUME = new int[] {//hpe modified
9, // STREAM_VOICE_CALL
9, // STREAM_SYSTEM
9, // STREAM_RING
9, // STREAM_MUSIC
9, // STREAM_ALARM
9, // STREAM_NOTIFICATION
9, // STREAM_BLUETOOTH_SCO
9, // STREAM_SYSTEM_ENFORCED
9, // STREAM_DTMF
9, // STREAM_TTS
9 // STREAM_INCALL_MUSIC
};
2、增加所有音量调节类型字段STREAM_TYPE
private static final int[] STREAM_TYPE= new int[] {
STREAM_VOICE_CALL,
STREAM_MUSIC,//include STREAM_MUSIC,STREAM_TTS,STREAM_INCALL_MUSIC
STREAM_ALARM,
STREAM_BLUETOOTH_SCO,
STREAM_RING //include STREAM_SYSTEM,STREAM_RING,STREAM_NOTIFICATION,STREAM_SYSTEM_ENFORCED,STREAM_DTMF
};
3、handleKeyDown(KeyEvent event, int stream)方法中修改KeyEvent.KEYCODE_VOLUME_DOWN 事件逻辑,将原来的adjustSuggestedStreamVolume方法屏蔽掉,因为我们不需要单独的去调节某个类型的音量所以需要改为自己的方法adjustAllTypeVolume,如下:
public void handleKeyDown(KeyEvent event, int stream) {
int keyCode = event.getKeyCode();
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
/*
* Adjust the volume in on key down since it is more
* responsive to the user.
*/
int flags = FLAG_SHOW_UI | FLAG_VIBRATE;
if (mUseMasterVolume) {
adjustMasterVolume(
keyCode == KeyEvent.KEYCODE_VOLUME_UP
? ADJUST_RAISE
: ADJUST_LOWER,
flags);
} else {
//hpe modify start
//adjustSuggestedStreamVolume(
// keyCode == KeyEvent.KEYCODE_VOLUME_UP
// ? ADJUST_RAISE
// : ADJUST_LOWER,
// stream,
// flags);
adjustAllTypeVolume(keyCode == KeyEvent.KEYCODE_VOLUME_UP
? ADJUST_LOWER
: ADJUST_RAISE);
//hpe modify end
}
break;
case KeyEvent.KEYCODE_VOLUME_MUTE:
if (event.getRepeatCount() == 0) {
if (mUseMasterVolume) {
setMasterMute(!isMasterMute());
} else {
// TODO: Actually handle MUTE.
}
}
break;
}
}
4、添加 adjustAllTypeVolume 方法逻辑,通过遍历STREAM_TYPE,调用adjustStreamVolume方法来分别设置音量,以达到统一设置音量的目的。其中adjustSuggestedStreamVolume是显示UI图标为媒体的音乐图标
//hpe add start
/*
* 音量键修改所有音量,但是进度条只显示媒体铃声的变化。
* */
public void adjustAllTypeVolume(int direction) {
for (int i = 0; i < STREAM_TYPE.length ; i++) {
adjustStreamVolume(STREAM_TYPE[i], direction, 0);
}
adjustSuggestedStreamVolume(ADJUST_SAME, STREAM_MUSIC, FLAG_SHOW_UI);
}
//hpe add end
二、在AudioService.java中的更改,android/frameworks/base/media/java/android/media/AudioService.java
1、修改最大默认音量,统一值
/** @hide Maximum volume index values for audio streams */
private static final int[] MAX_STREAM_VOLUME = new int[] {//hpe modified
15, // STREAM_VOICE_CALL
15, // STREAM_SYSTEM
15, // STREAM_RING
15, // STREAM_MUSIC
15, // STREAM_ALARM
15, // STREAM_NOTIFICATION
15, // STREAM_BLUETOOTH_SCO
15, // STREAM_SYSTEM_ENFORCED
15, // STREAM_DTMF
15 // STREAM_TTS
};
2、如果音量调到最低时,不需要震动,需要将mHasVibrator变量设置为false
mHasVibrator = false;//vibrator == null ? false : vibrator.hasVibrator();//hpe modified
至此,Android 4.4统一音量修改已经完成。