2012-10-03 17 views
12

Bueno, la pregunta es bastante simple: ¿cómo puedo manejar el clic izquierdo/derecho/medio, la rueda y (!) Desplazar el cursor en android 2/3/4.Manejar todos los eventos del mouse en Android

que he estado cavando sobre este tema y encontré la siguiente

  • en api 14 que puede manejar casi cualquier cosa con nueva MotionEvent de fantasía
  • también tenemos accesorios abierta que parece estar bien con el ratón USB desde api 12 (aún falta bluetooth) (UPD OA backported a 2.3.4)
  • mouse realmente funciona bien en tabletas con ICS y Honeycomb y cyanogen 2.3.7, pero actúa como un simple toque en cada botón. Me pregunto si una forma de interceptar los mensajes del mouse.

Ayúdeme por favor a entender cómo puedo manejar el mouse bluetooth y usb de la manera más simple y correcta en cada versión de Android. O decir que es imposible.

UPD2: parece como host USB sólo en 3.1 +, mientras que USB de accesorios inútiles para esta tarea

+0

Lea http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch-events/1775 y http: // developer.android.com/reference/android/view/MotionEvent.html –

+1

Miré esos artículos, pero a no he encontrado nada nuevo. ¿A qué insinúa? – mjollneer

Respuesta

15

estas son mis conclusiones:

Por Api Nivel 9: <

  • botón principal del ratón externo se maneja igual que un toque de un dedo normal. Parece que no hay forma de detectar el mouse.
  • El botón secundario se envía a través de KeyEvent con KeyEvent.KEYCODE_BACK. No hay manera de distinguir entre las prensas "Atrás" y las prensas de botones secundarias.

Por Api Nivel 9+:

  • Un nuevo método se ha añadido MotionEvent.getSource(). Yo uso este para detectar si la entrada es desde el mouse.
  • El botón secundario todavía se envía a través de KeyEvent con KeyEvent.KEYCODE_BACK.En algunos dispositivos, KeyEvent.getSource() devuelve InputDevice.SOURCE_MOUSE, por lo que la detección de botones secundarios funciona en algunos casos.

para la API de nivel 12+:

  • OnGenericMotionListener se ha añadido. Utilizo este para detectar movimientos del mouse con ACTION_HOVER_MOVE y cambios de rueda con ACTION_SCROLL.

para la API de nivel 14+:

  • Nuevo método MotionEvent.getButtonState(). Rastreo este para distinguir si se presiona un botón primario, secundario, terciario del mouse cuando el MotionEvent.getActionMasked() es ACTION_MOVE, ACTION_DOWN o ACTION_UP.

no he mirado a nivel de API 15/16 o el tipo de herramienta, porque soy capaz de realizar un seguimiento de todos los eventos del ratón con lo que he descrito anteriormente. Sería interesante si alguien tiene información adicional o si me estoy perdiendo 15/16/tooltypes.

+0

Presentación clara y algunas sugerencias nuevas)) – mjollneer

+0

En dispositivos Samsung con nivel de API 23, solo obtengo un * KeyEvent * y no un * MotionEvent * y no hay forma de detectar un evento MousUp con * OnGenericMotionListener * en _vanilla_ dispositivos Android que funciona con * OnGenericMotionListener *. – Roel

1

OK. Creo que tengo una pista. He leído highlights about android 3.x/4.x y se dio cuenta de que ...

  1. podemos utilizar el ratón en Android 3+, en las versiones anteriores del ratón es específico del dispositivo

  2. podemos interceptar eventos de mouse reconocidos desde cualquier fuente (BT o USB) ...

2.1. ... scroll o hover_move en 3.1+ en onGenericMotionEvent

2.2. ... botones primarios, secundarios y terciarios y desplazarse hacia arriba/salir en android 4.0+ (y finalmente TOOL_TYPE_MOUSE constante)

La otra opción es analizar datos de bajo nivel de bluetooth o usb en modo host.

¿Estoy en lo correcto? Todavía me pregunto si alguien tiene una mejor solución.

Cuestiones relacionadas