Gestionar todos los eventos de mouse en Android
Bueno, la pregunta es bastante simple – ¿cómo puedo manejar izquierda / derecha / medio clic, rueda y (!) Movimiento hover en android 2/3/4.
He estado investigando este tema y he encontrado lo siguiente
- USB_DEVICE_ATTACHED sólo iniciaActividad de Galaxy S3 ICS
- Recepción de datos mediante dispositivo USB Host y FTDI
- Modificar libusb para aceptar descriptor de archivo
- ¿Cómo leer / escribir almacenamiento externo USB en Android?
- Comunicación entre PhoneGap, dispositivo externo usb y modo host Android
- En api 14 podemos manejar casi cualquier cosa con la nueva y elegante MotionEvent
- También tenemos el accesorio abierto que parece ser aceptable con el ratón del USB puesto que el api 12 (que todavía falta el bluetooth) (UPD OA backported a 2.3.4)
- Ratón realmente funciona bien en tabletas con ICS y nido de abeja y cianógeno 2.3.7, pero actúa como un solo toque en cada botón. Me pregunto si hay una manera de interceptar mensajes de ratón.
Ayúdame por favor a entender cómo puedo manejar el ratón bluetooth y usb de la manera más simple y correcta en cada versión de android. O decir que es imposible.
UPD2: parece USB Host sólo en 3.1+, mientras que el accesorio USB inútil para esta tarea
- Transferir archivos de android a computadora vía usb programáticamente
- Dispositivo USB HID para Android
- Servicio de modo de host USB Android - Inicio basado en USB_DEVICE_ATTACHED
- USB_DEVICE_ATTACHED Intento de no disparar
- No puedo conectar Nexus S a mi Mac OS x Lion 10.7 para depuración USB
- Máximo amperaje de salida de los Smartphones USB
- Android: Comunicación con un dispositivo USB que actúa como host
- Lectura de datos de ratón sin procesar en android
Estos son mis descubrimientos:
Para Nivel Api <9:
- El botón primario del ratón externo se maneja como un toque de dedo normal. Parece que no hay manera de detectar el ratón.
- El botón secundario se envía a través de un
KeyEvent
conKeyEvent.KEYCODE_BACK
. No hay manera de distinguir entre las prensas "Back" actuales y las pulsaciones secundarias del botón.
Para Api Nivel 9+:
- Se ha añadido un nuevo método
MotionEvent.getSource()
. Yo uso este para detectar si la entrada es de ratón. - El botón secundario todavía se envía a través de un
KeyEvent
conKeyEvent.KEYCODE_BACK
. En algunos dispositivosKeyEvent.getSource()
devuelveInputDevice.SOURCE_MOUSE
, por lo que la detección de botones secundarios funciona en algunos casos.
Para Api Nivel 12+:
-
OnGenericMotionListener
ha agregadoOnGenericMotionListener
. Utilizo éste para detectar movimientos del ratón conACTION_HOVER_MOVE
y los cambios de la rueda conACTION_SCROLL
.
Para Api Nivel 14+:
- Nuevo método
MotionEvent.getButtonState()
. Rastro esto para distinguir si un botón primario, secundario, terciario del ratón es presionado cuando elMotionEvent.getActionMasked()
esACTION_MOVE
,ACTION_DOWN
oACTION_UP
.
No he mirado en Api nivel 15/16 o el tipo de herramienta, porque soy capaz de rastrear todos los eventos de ratón con lo que he descrito anteriormente. Sería interesante si alguien tiene información adicional o si me falta con 15/16 / tooltypes.
DE ACUERDO. Creo que tengo una pista. He leído lo más destacado sobre android 3.x / 4.x y se dio cuenta de que …
-
Podemos usar el ratón en android 3+, en las versiones anteriores el ratón es específico del dispositivo
-
Podemos interceptar eventos de ratón reconocidos desde cualquier fuente (BT o USB) …
2.1. … scroll o hover_move en 3.1+ en onGenericMotionEvent
2.2. … primaria, secundaria y terciaria botones y hover entrar / dejar en android 4.0 + (y, finalmente, TOOL_TYPE_MOUSE constante)
La otra opción es analizar datos bastante bajos de socket bluetooth o usb en modo host.
¿Estoy bien? Todavía me pregunto si alguien tiene mejor solución.
- La actualización de Google Play Services de 8.4.0 a 9.2.1 provoca un error de sincronización de Gradle
- Los cuadros de diálogo de Android 4.1.2 se llaman dos veces