如何在不使用元键的情况下在Android中定义组合键

时间:2017-12-30 11:59:34

标签: android keyboard-events

我需要为我的应用设置一个组合键,以便我可以调用我已经开始的stopLockTask()。我怎样才能做到这一点?我可以使用以下代码使用Shift + Left Arrow执行此操作。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    //Read the input and display its code

    switch (keyCode) {
        case KeyEvent.KEYCODE_HOME:

            mTextView.setText("Home");
            break;
        case KeyEvent.KEYCODE_DPAD_LEFT:
            if (event.isShiftPressed()) {
                Toast.makeText(this, "You pressed left + Shift", Toast.LENGTH_SHORT).show();
                stopLockTask();
            }
            break;


        default:
            char c = event.getDisplayLabel();
            String code = String.valueOf(keyCode);
            String displayText = c + " " + keyCode;
            mTextView.setText(displayText);
            mTextView.setBackgroundColor(mColor ^= Color.GREEN);

    }

    return true;
}

但是,如果没有Shift或Ctrl或Alt,我怎么能这样做,因为远程控制器上没有元键?我只有Android TV遥控器上的按键。有没有办法定义某个键序列(例如左+左+上+ OK)?

1 个答案:

答案 0 :(得分:2)

您可以将按键的当前时间保存在变量中。

例如,要保持按下所有数字0,1和2,您可以执行以下操作:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_NUMPAD_0:
            numpad0Time = Date.now();
            break;
        case KeyEvent.KEYCODE_NUMPAD_0:
            numpad1Time = Date.now();
            break;
        case KeyEvent.KEYCODE_NUMPAD_0:
            numpad2Time = Date.now();
            break;
    }

    checkKeys();

    return true;
}

private void checkKeys() {
    long now = Date.now();
    if(now - numpad0Time < 500 && 
       now - numpad1Time < 500 && 
       now - numpad2Time < 500) {
         stopLockTask();
    }
}

通过这种方式,您可以检查是否在500毫秒的时间戳中按下了所有键。