Как отличить длительное нажатие клавиши от обычного нажатия клавиши?

Я пытаюсь переопределить функциональность нажатия клавиши возврата. Когда пользователь нажимает ее один раз, я хочу, чтобы она вернулась к предыдущий экран.Однако, когда клавиша возврата удерживается долгим нажатием (скажем, две секунды или более), я хочу выйти из приложения.

К настоящему времени я переопределил эти два метода в своей деятельности:

@Override
public boolean onKeyDown( int keyCode, KeyEvent event){
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        //manage short keypress
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyLongPress( int keyCode, KeyEvent event){
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        //manage long keypress (different code than short one)
        return true;
    }
    return super.onKeyLongPress(keyCode, event);
}

​​Но обратный вызов onKeyLongPress никогда не вызывается, потому что событие всегда принимается методом onKeyDown .

Есть ли способ заставить оба метода работать? выполнить все в onKeyDown и использовать количество повторений / миллисекунд для его обнаружения?

10
задан Peter Mortensen 28 March 2013 в 13:56
поделиться