单击音量键时禁用声音

Disable sound when volume keys clicked

在我的应用程序中,我覆盖了 volume upvolume down 键。问题是当用户单击这两个键之一时,会播放声音。我想以某种方式disable/mute这个声音。

这是我的代码片段:

@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);
}

我自己想出来了。 有一种方法可以在按下音量键时停止声音。您需要无限播放空声音,因此当用户单击音量键时 "trying" 会更改媒体音量,因此不会播放点击声音。 您可以通过搜索 empty sound 下载空声音,然后将其放入项目的 raw 文件夹中。 最后一步只是覆盖音量键。

这是您需要的代码:

定义 MediaPlayer 变量。

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

最后覆盖按钮的操作。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_DOWN: {
            // Do something when volume down button is clicked

            return true;
        }
        case KeyEvent.KEYCODE_VOLUME_UP: {
            // Do something when volume up button is clicked

            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

使用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);
    }
}