Как я могу обнаружить двойной щелчок с помощью физического ключа в Android? (OnKeyMultiple) - PullRequest
0 голосов
/ 25 мая 2020

Я делаю Android приложение с физическими ключами. Я сделал код ключа 24 (можно изменить на уникальный ключ), чтобы выполнять некоторые задания в моем коде, и хочу, чтобы он делал что-то еще при двойном щелчке. Я пробовал onKeyMultiple, но он вообще не работает. Ниже мой код с onKeyMultiple

@Override
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
    Log.d("KeyCode Multiple : ", Integer.toString(keyCode) + "," + Integer.toString(repeatCount));
    Intent intent;
    if (keyCode == 24 && event.getRepeatCount() == 2) { // original : 133
        FindActivity.this.finish();
        intent = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(intent);
    }
    return false;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == 24) {
        event.startTracking();
        Log.d("Main Java Log", "keyevent count : " + Integer.toString(event.getRepeatCount()));
    }
    return super.onKeyDown(keyCode, event);
}

Сначала я попробовал if (keyCode == 24 && repeatCount == 2), но он не работает, поэтому я отключил onKeyDown Tracking 24 и сделал if (keyCode = = 24 && event.getRepeatCount () == 2), но опять же это не работает. Плюс getReapeatCount () возвращает 0 всякий раз, когда я нажимаю кнопку 24 один или два раза. Я искал примеры, в которых используется onKeyMultiple или несколько физических ключевых событий, но я не нашел ни одного. ПОЖАЛУЙСТА, дайте мне совет или исправьте мой код. Заранее искренне спасибо.

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Я пробовал код, предложенный @Hasan Bou Taam. И для тех, кто находит событие быстрого двойного щелчка, проверьте это:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == 24) {
            if (!clickTwice) {
                starttime = System.currentTimeMillis();
                Log.d("Main Java Log", "Start time : " + String.valueOf(starttime));
                clickTwice = true;
            } else {
                endtime = System.currentTimeMillis();
                Log.d("Main Java Log", "End time : " + String.valueOf(endtime));
                if (endtime - starttime <= 500) { // time interval for second click
                    clickTwice = false;
                    event.startTracking();
                    // do something for doubleclick keyevent
                }
            }
        }
    }
    return super.onKeyDown(keyCode, event);
}
0 голосов
/ 25 мая 2020

Помогает ли это:

private boolean clickedTwice = false;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == 24) {

if(clickedTwice){

//key was clicked twice
clickedTwice = false;
event.startTracking();

}else{
//key was clicked the first time
clickedTwice = true;

}

return true;

}
return super.onKeyDown(keyCode, event);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...