单击音量键时禁用声音

时间:2016-09-22 18:48:16

标签: java android android-studio key volume

在我的应用程序中,我覆盖了volume upvolume 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);
}

2 个答案:

答案 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();
}