Samsung Galaxy Note - почему события KeyEvent.KEYCODE_FORWARD_DEL генерируются, когда его стилус касается / отпускает экран? - PullRequest
2 голосов
/ 27 марта 2012

Samsung Galaxy Note имеет стилус, и я наблюдаю странное поведение, когда стилус касается / покидает экран.

В дополнение к ожидаемой серии вызовов SessionView.onTouchEvent, вызовы SessionView.onKeyDown / SessionView.onKeyUpпринимаются, когда стилус касается / покидает экран.Код KeyEvent для вызовов SessionView.onKeyDown / SessionView.onKeyUp равен 112 (KeyEvent.KEYCODE_FORWARD_DEL), скан-код 555.

Кроме того, нажатие / отпускание butoon на стилусе приводит к вызовам SessionView.onKeyDown / SessionView.onKeyUp с KeyEvent114 (KeyEvent.KEYCODE_CTRL_RIGHT), скан-код 544.

Источник события для KeyEvent указан как 257 (InputDevice.SOURCE_KEYBOARD), что делает его неотличимым от события клавиатуры и портит функциональность клавиатуры в нашем приложении, поскольку стилус касаетсяпроизводить неожиданные нажатия клавиши DEL.

Интересно, кто-нибудь может пролить немного света на это поведение?Это просто проприетарный взлом разработчиков Samsung для реализации функциональности стилуса на Android 2.3?Какой надежный способ справиться с этим?

Информация об устройстве:

Device model: GT-N7000
Firmware version: 2.3.6
Kernel version: 2.6.35.7-N7000XXLA4-CL886827
se.infra@SEP-74 )
#2 SMP PREEMPT Thu Jan 12 21:15:11 KST 2012
Build number: GINGERBREAD.XXLA4

1 Ответ

0 голосов
/ 24 апреля 2012

Вы можете видеть, что KEYCODE_FORWARD_DEL - это новое поле в API уровня 11. Поэтому код ключа 112 должен быть кодом, определенным Samsung.

Использовать отражение Java в методе onKeyDown () в соответствии со следующим кодом.Мы могли бы получить 112 это KEYCODE_PEN в системе.

Field[] fields = event.getClass().getDeclaredFields();
for (Field f : fields) {
    if (f.getType().equals(int.class)) {
        try {
            TLog.i(TAG, f.getName() + ": " + f.getInt(event));
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...