接管Android上的音量键

Chr*_*ian 6 android

我想在Volume Up和Down上接受过量输入.目前我的代码是:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    Log.v(TAG, event.toString());
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
        mLamp.moveBackward();

        return false;
    }
    else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
        mLamp.moveForward();

        return false;
    }

    return true;
}
public boolean onKeyUp(int keyCode, KeyEvent event) {

    Log.v(TAG, event.toString());
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
        return false;
    }
    else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

这会触发mLamp.moveBackward()和mLamp.moveForward()功能,但它仍然会改变铃声的音量.我需要做些什么才能使铃声响度不变?

zed*_*xff 19

如果您处理了该事件,请返回true.如果您想允许事件由下一个接收器处理,请返回 false.


小智 8

如果处理事件,则返回true非常重要,但如果您没有处理事件,最好确保事件仍由超类处理.这是我的应用程序中的一些代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
        keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        changeColor(keyCode);

        return true;
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
        keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        // do nothing                                                       

        return true;
    }

    return super.onKeyUp(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,超类调用是必要的,以便我的设备上的其他硬件按钮继续工作.