Имеется смартфон на Android и Bluetooth геймпад с 4 аналоговыми осями (2 стика) и 2 цифровыми (кнопки вверх-вниз-вправо-влево, «крестовина») + ещё кнопки.
Я считываю кнопки с помощью переопределения dispatchKeyEvent и оси с помощью dispatchGenericMotionEvent у Activity. И у меня 2 проблемы:
1) Мне удалось считать только 2 аналоговых оси из 4 с помощью ev.getAxisValue(MotionEvent.AXIS_X) и ev.getAxisValue(MotionEvent.AXIS_Y). Я не могу разобраться, как считать ещё две оси, хотя ОС их точно чувствует - движения второго стика тоже вызывают dispatchGenericMotionEvent.
2) Движения первого стика эмулирует «крестовину». То есть я получаю события о нажатии кнопок вверх-вниз-вправо-влево и при их реальном нажатии, и при движении первого стика. А я так не хочу. Я хочу иметь возможность различать эти события. Как?