在项目中,如果没有音乐在放的时候,按调节音量的键,调用的是调节铃声的音量。
最近又用户反映,调节了音量,但在打游戏的时候的背景音乐的音量却没有变动。
正是因为用户在外面调的是铃声音量,而游戏背景音乐的音量确实多媒体的音量。
优化思路,在BaseActivity 拦截onKeyDown,强制调用调节音量的状态,设为调节多媒体音量的状态。
代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN://游戏音量减小
AudioPlayUtils.getInstance().lowerVoice();
return true;
case KeyEvent.KEYCODE_VOLUME_UP://游戏音量增大
AudioPlayUtils.getInstance().raiseVoice();
return true;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
调用的方法如下:
/**
* 调高音量(多媒体音量)
*/
public void raiseVoice(){
//强制调用多媒体音量
audioManager.adjustStreamVolume(
AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
//本地保存多媒体音量
int nowVol2 = PreferenceHelper.getMyPreference().getSetting().getInt("music", 0);
if (nowVol2 != 15) {
PreferenceHelper.getMyPreference().getEditor().putInt("music", nowVol2 + 1);
PreferenceHelper.getMyPreference().getEditor().commit();
AudioPlayUtils.getInstance().SetVoice(PreferenceHelper.getMyPreference().getSetting().getInt("music", 0));
}
}
/**
* 调小音量(多媒体音量)
*/
public void lowerVoice(){
//强制调用多媒体音量
audioManager.adjustStreamVolume(
AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
//本地保存多媒体音量
int nowVol = PreferenceHelper.getMyPreference().getSetting().getInt("music", 0);
if (nowVol != 0) {
PreferenceHelper.getMyPreference().getEditor().putInt("music", nowVol - 1);
PreferenceHelper.getMyPreference().getEditor().commit();
AudioPlayUtils.getInstance().SetVoice(PreferenceHelper.getMyPreference().getSetting().getInt("music", 0));
}
}