2012-07-27 17 views
5

Tengo un dispositivo Android en el que se puede conectar un gamepad (es un controlador XBox 360 totalmente estándar, pero también necesito apoyar otras variedades). El gamepad se muestra como un dispositivo de entrada con algunos ejes analógicos y algunos botones.Android: enumerando los botones en un gamepad

Necesito poder consultar Android para saber qué botones admite el gamepad. ¿Alguien sabe como hacer esto?

Sé que el sistema tiene esta información, porque si escribo una aplicación de línea de comandos que abre /dev/input/event... y consulta los botones usando EVIOCGBIT ioctl, obtengo una buena lista de botones compatibles del kernel. Pero no puedo hacer esto desde una aplicación de Android porque no tengo permiso para acceder a los dispositivos de entrada directamente.

Parece que debería ser posible obtener el objeto KeyCharacterMap de InputDevice y consultarlo; pero parece que Android ha unido el mapa de teclas del teclado QWERTY predeterminado al gamepad, en lugar de construir uno que realmente coincida con lo que el gamepad admite. Esto felizmente me dirá que el gamepad tiene una tecla Q, que no tiene, y que no tiene una tecla BUTTON_X, lo que hace, y para la que estoy recibiendo eventos clave. Entonces eso no está ayudando.

¿Hay alguna manera de hacer esto?

+0

Debe haber documentación de su proveedor al respecto. ¿Qué dispositivo estás usando? –

+0

Cualquiera --- esto tiene que ser una solución portátil. –

Respuesta

1

No he encontrado una manera todavía, pero he encontrado una solución horrible.

Si llama al , puedo preguntar a Android si cualquier dispositivo de entrada en el sistema admite el código clave especificado. Al recorrer todos los botones posibles que pueden aparecer en un gamepad (de manera útil, todos se llaman KeyEvent.KEYCODE_BUTTON_something), puedo deducir que cualquier gamepad conectado debe admitir al menos algunos de estos botones.

No es una solución muy buena --- si tengo un controlador XBox 360 y un Wiimote conectados al mismo tiempo, entonces no puedo entender que el controlador XBox no tenga los botones 1 o 2, y el Wiimote no tiene X o Y, por ejemplo. Pero al menos es un comienzo.

Si alguien tiene alguna idea mejor, sugiera algunos ...

+1

Parece que finalmente agregaron esto en API nivel 19 (4.4) con InputDevice.hasKeys: http://developer.android.com/reference/android/view/InputDevice.html#hasKeys%28int...%29 –

Cuestiones relacionadas