在我的应用程序中,我覆盖了volume up
和volume down
个键。问题是当用户单击这两个键中的一个时,会播放声音。我想以某种方式禁用/静音这个声音。
这是我的代码片段:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN: {
// do something when user click volume down key
return true;
}
case KeyEvent.KEYCODE_VOLUME_UP: {
// do something when user click volume up key
return true;
}
}
return super.onKeyDown(keyCode, event);
}
答案 0 :(得分:1)
使用onKeyDown或onKeyUp仍会提供更改音量的默认声音。改为使用dispatchKeyEvent。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
return true;
default:
return super.dispatchKeyEvent(event);
}
}
答案 1 :(得分:0)
我为自己想出来了。
按下音量键时有一种方法可以停止声音。你需要无限播放一个空的声音,所以当用户点击一个音量键时,它就是"尝试"更改媒体音量,因此没有播放的声音。
您可以通过搜索IQueryable
下载空声,然后将其放入项目中的empty sound
文件夹中。
最后一步是覆盖音量键。
以下是您需要的代码:
定义MediaPlayer变量。
raw
在private MediaPlayer infinite_sound;
中你需要无限播放空音。
onResume()
在@Override
protected void onResume() {
super.onResume();
infinite_sound = MediaPlayer.create(this, R.raw.empty);
infinite_sound.setLooping(true);
infinite_sound.start();
}
中你需要停止声音。
onPause()
最后重写按钮的动作。
@Override
public void onPause() {
super.onPause();
infinite_sound.release();
}