Подтвердить что ты не робот

Управлять всеми событиями мыши в Android

Ну, вопрос довольно прост - как я могу управлять левым/правым/средним кликом, колесом и (!) движением hover в android 2/3/4.

Я раскалывал эту тему и нашел следующее

  • в api 14 мы можем обрабатывать практически все, что угодно, с новым мотивом MotionEvent
  • У нас также есть открытый аксессуар, который, кажется, в порядке с USB-мышью, поскольку api 12 (все еще отсутствует Bluetooth) (UPD OA backported to 2.3.4)
  • Мышь действительно хорошо работает на планшетах с ICS, Honeycomb и cyanogen 2.3.7, но действует как одно касание на каждой кнопке. Интересно, есть ли способ перехватить сообщения мыши.

Помогите мне понять, как я могу обращаться с Bluetooth и usb-мышью самым простым и правильным способом в каждой версии Android. Или сказать, что это невозможно.

UPD2: кажется, что USB Host только в версии 3.1+, а USB-аксессуар бесполезен для этой задачи

4b9b3361

Ответ 1

Вот мои выводы:

Для уровня Api < 9:

  • Внешняя основная кнопка мыши обрабатывается так же, как и обычное касание пальца. Кажется, что нет способа обнаружить мышь.
  • Вторичная кнопка отправляется через KeyEvent с помощью KeyEvent.KEYCODE_BACK. Невозможно провести различие между фактическими нажатиями "Назад" и дополнительными нажатиями кнопок.

Для уровня Api 9 +:

  • Добавлен новый метод MotionEvent.getSource(). Я использую это, чтобы определить, находится ли вход от мыши.
  • Вторичная кнопка по-прежнему отправляется через KeyEvent с помощью KeyEvent.KEYCODE_BACK. На некоторых устройствах KeyEvent.getSource() возвращает InputDevice.SOURCE_MOUSE, поэтому в некоторых случаях работает вторичное обнаружение кнопок.

Для Api Level 12 +:

  • Добавлен
  • OnGenericMotionListener. Я использую это для обнаружения движений мыши с помощью ACTION_HOVER_MOVE и изменения колес с помощью ACTION_SCROLL.

Для Api Level 14 +:

  • Новый метод MotionEvent.getButtonState(). Я отслеживаю это, чтобы отличить, нажата ли первичная, вторичная, третичная кнопка мыши, когда MotionEvent.getActionMasked() - ACTION_MOVE, ACTION_DOWN или ACTION_UP.

Я не изучал Api Level 15/16 или тип инструмента, потому что я могу отслеживать все события мыши с тем, что я описал выше. Было бы интересно, если у кого-то есть дополнительная информация или если я пропущу 15/16/типы инструментов.

Ответ 2

OK. Кажется, я понял. Я прочитал основные сведения об андроиде 3.x/4.x и понял, что...

  • мы можем использовать мышь в android 3+, в более старых версиях мышь специфична для устройства

  • мы можем перехватывать распознанные события мыши из любого источника (BT или USB)...

2,1.... прокрутка или hover_move в 3.1+ в onGenericMotionEvent

2,2.... первичные, вторичные и третичные кнопки и наведите указатель на вход/оставить в android 4.0+ (и, наконец, константу TOOL_TYPE_MOUSE)

Другой вариант - разобрать довольно низкоуровневые данные из сокета bluetooth или usb в режиме хоста.

Я прав? Все еще интересно, есть ли у кого-нибудь лучшее решение.