Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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);
}
like image 524
jelic98 Avatar asked Oct 22 '25 11:10

jelic98


2 Answers

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

like image 55
Hitchhiker Avatar answered Oct 25 '25 01:10

Hitchhiker


My solution for long press on the space key.

private long ms_press;
...
@Override
public void onPress( int i ){
    ms_press = System.currentTimeMillis();
}
...
@Override
public void onKey( int primaryCode, int[] keyCodes) {
    if( primaryCode == 32 && (System.currentTimeMillis()-ms_press) >= 1000  ){ 
        //long press on Space key
    }else{
        //...
    }
}
like image 26
Style-7 Avatar answered Oct 25 '25 00:10

Style-7