Search code examples
androidandroid-softkeyboardonkeydownonkeyupandroid-input-method

onKeyLongPress not working for KeyboardKey


How to catch onKeyLongPress on KeyboardKey. The code below works only if I put "KEYCODE_VOLUME_DOWN" or "KEYCODE_VOLUME_UP" instead of "KEYCODE_Q". I also tried to write "113" instead of "KeyEvent.KEYCODE_Q", but it didn't help.

(If you need the XML please ask.)

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_Q) {
        shortPress = false;
        Toast.makeText(this, "longPress", Toast.LENGTH_SHORT).show();
        return true;
    }

    return false;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_Q) {
        if(event.getAction() == KeyEvent.ACTION_DOWN){
            event.startTracking();
            if(event.getRepeatCount() == 0){
                shortPress = true;
            }
            return true;
        }
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_G) {
        if(shortPress){
            Toast.makeText(this, "shortPress", Toast.LENGTH_SHORT).show();
        }
        
        shortPress = false;

        return true;
    }

    return super.onKeyUp(keyCode, event);
}

Solution

  • For soft keyboard, you should use proper timer to handle long press event like any other applications. LatinIME also uses this solution, please check out.

    PointerTracker.onDownEventInternal.startLongPressTimer()