android控制音量键按下的操作

在app中,如果不是特殊场景,音量键默认调整铃声音量。但是很多情况下,我们需要调整的是媒体音量。所以可以在activty中加上这句:

this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

在一些特殊场景下,比如视频通话之类,因为打开了麦克风,所以系统默认会让音量键调整通话音量,类似于你打电话的时候。

此时想要控制音量键按下的操作,需要重写onKeyDown方法:

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		AudioManager am = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
		switch (keyCode) {
		case KeyEvent.KEYCODE_VOLUME_UP:
			am.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
			am.adjustStreamVolume(AudioManager.STREAM_DTMF, AudioManager.ADJUST_RAISE, 0);
			break;
		case KeyEvent.KEYCODE_VOLUME_DOWN:
			am.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
			am.adjustStreamVolume(AudioManager.STREAM_DTMF, AudioManager.ADJUST_RAISE, 0);
			break;
		default:
			break;
		}
		return super.onKeyDown(keyCode, event);
	}
解释一下adjustStreamVolume的三个参数:

第一个streamType是需要调整音量的类型,这里设的是媒体音量,可以是:  
STREAM_ALARM 警报  
STREAM_MUSIC 音乐回放即媒体音量  
STREAM_NOTIFICATION 窗口顶部状态栏Notification,  
STREAM_RING 铃声  
STREAM_SYSTEM 系统  
STREAM_VOICE_CALL 通话  
STREAM_DTMF 双音多频
  
第二个direction,是调整的方向,增加或减少,可以是:  
ADJUST_LOWER 降低音量  
ADJUST_RAISE 升高音量  
ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量  
  
第三个flags是一些附加参数,只介绍两个常用的  
FLAG_PLAY_SOUND 调整音量时播放声音  
FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个  
0 表示什么也没有


我的需求是在视频通话界面,控制音量键进行媒体音量的操作,但是由于麦克风,所以默认有通话音量,导致出现双音量的控制,这时候就用到STREAM_DTMF属性,让它不显示,成功解决。

你可能感兴趣的:(Android)