2012-07-27 11 views
5

Ich habe ein Android-Gerät, in dem ein Gamepad angeschlossen werden kann (es ist eine völlig standardmäßige XBox 360 Controller, aber ich muss auch andere Sorten unterstützen). Das Gamepad wird als InputDevice mit einigen analogen Achsen und einigen Buttons angezeigt.Android: Enumeration der Tasten auf einem Gamepad

Ich muss Android abfragen können, um herauszufinden, welche Tasten das Gamepad unterstützt. Weiß jemand, wie man das macht?

Ich weiß, dass das System diese Informationen hat, denn wenn ich eine Befehlszeilen-App schreibe, die /dev/input/event... öffnet und fragt die Tasten EVIOCGBIT ioctl, bekomme ich eine schöne Liste der unterstützten Tasten aus dem Kernel. Aber ich kann dies nicht von einer Android-Anwendung aus tun, weil ich nicht die Erlaubnis habe, direkt auf die Eingabegeräte zuzugreifen.

Es sieht so aus, als ob es möglich ist, das KeyCharacterMap-Objekt des InputDevice abzurufen und das abzufragen; aber es sieht so aus, als ob Android die standardmäßige QWERTY-Tastatur-Keymap an das Gamepad angehängt hat, anstatt eine zu konstruieren, die tatsächlich mit dem übereinstimmt, was das Gamepad unterstützt. Dies wird mir glücklicherweise sagen, dass das Gamepad eine Q-Taste hat, was es nicht tut, und dass es keine BUTTON_X-Taste hat, was es tut und für die ich Schlüsselereignisse erhalte. Das hilft also nicht.

Gibt es eine Möglichkeit, dies zu tun?

+0

Es sollte Dokumentation von Ihrem Anbieter zu diesem Thema sein. Welches Gerät verwendest du? –

+0

Any --- dies muss eine tragbare Lösung sein. –

Antwort

1

Ich habe noch keinen Weg gefunden, aber ich habe einen schrecklichen Workaround gefunden. Wenn Sie KeyCharacterMap.deviceHasKey(keycode) anrufen, kann ich Android fragen, ob irgendein Eingabegerät auf dem System den angegebenen Schlüsselcode unterstützt. Durch das Durchlaufen aller möglichen Knöpfe, die auf einem Gamepad auftreten können (nützlich heißen sie alle KeyEvent.KEYCODE_BUTTON_something), kann ich herausfinden, dass jedes angeschlossene Gamepad mindestens einige dieser Tasten unterstützen muss.

Es ist keine sehr schöne Lösung --- wenn ich einen XBox 360 Controller und eine Wiimote gleichzeitig verbunden habe, dann kann ich nicht herausfinden, dass der XBox Controller keine Tasten 1 oder 2 hat, und der Wiimote hat zum Beispiel nicht X oder Y. Aber es ist zumindest ein Anfang.

Wenn jemand bessere Ideen hat, schlagen Sie bitte einige ...

+1

Es sieht so aus, als hätten sie das endlich in API Level 19 (4.4) mit InputDevice.hasKeys hinzugefügt: http://developer.android.com/reference/android/view/InputDevice.html#hasKeys%28int...%29 –