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