Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上接管音量键_Android - Fatal编程技术网

在Android上接管音量键

在Android上接管音量键,android,Android,我想在音量上下转换输入。目前我的代码是: @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

我想在音量上下转换输入。目前我的代码是:

@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;
}
这会触发
mLamp.moveBackward()
mLamp.moveForward()
功能,但仍会更改振铃器的音量。 我该怎么做才能保证振铃器的响度不变

如果处理了事件,则返回
true
。 如果您希望允许事件 由下一个接收者处理,返回
false


如果处理了该事件,则返回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);
}

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

简单有效的回答。应该是这样的。谢谢。vod23的答案对于保持其他按钮正常工作至关重要。您的最后一行将递归调用导致stackoverflow或ANR的方法,以先发生的为准。最后一行应该调用超类的方法,而不是它本身。
public boolean dispatchKeyEvent(KeyEvent event) {

    if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {             
            return true;
    } else if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) {
            return true;
    }
    return dispatchKeyEvent(event);
}