2012-07-27 24 views
5

Bir gamepad'in bağlanabileceği bir Android cihazım var (bu tamamen standart bir XBox 360 denetleyicisidir, ancak diğer çeşitleri de desteklemeliyim). Gamepad, bazı analog eksenler ve bazı düğmelerle bir InputDevice olarak gösteriliyor.Android: bir gamepad üzerindeki düğmeleri numaralandırma

Gamepad'in hangi düğmelerini desteklediğini öğrenmek için Android'i sorgulayabilmem gerekir. Bunu yapmayı bilen var mı?

Sistemin bu bilgiye sahip olduğunu biliyorum, çünkü /dev/input/event...'u açan bir komut satırı uygulaması yazıyor ve EVIOCGBIT ioctl kullanarak düğmeleri sorgularsa, çekirdekten desteklenen düğmelerin güzel bir listesini alırım. Ancak bunu bir Android uygulamasından yapamıyorum, çünkü doğrudan giriş cihazlarına erişme iznim yok.

InputDevice'ın KeyCharacterMap nesnesini elde etmek ve sorgulamak mümkün gibi görünüyor; ancak Android'in, gamepad'lerin desteklediği ile eşleşmesi yerine, varsayılan QWERTY klavye tuş takımını gamepad'e eklemiş gibi görünüyor. Bu, gamepad'in sahip olmadığı bir Q anahtarına sahip olduğunu ve bunun anahtar olayları aldığım bir BUTTON_X anahtarının olmadığını söyleyecektir. Yani bu yardımcı olmuyor.

Bunu yapmanın bir yolu var mı?

+0

Bu konuda satıcınızdan belgeler alınmalıdır. Hangi cihazı kullanıyorsunuz? –

+0

Herhangi biri --- bunun taşınabilir bir çözüm olması gerekir. –

cevap

1

Henüz bir yol bulamadım, ancak korkunç bir çözüm buldum.

KeyCharacterMap.deviceHasKey(keycode) numaralı telefonu arayarak, Android'de numaralı herhangi bir giriş aygıtının sistemde belirtilen anahtar kodunu destekleyip desteklemediğini sorabilirim. Bir gamepad üzerinde oluşabilecek tüm olası düğmeleri tekrarlayarak (hepsi, hepsi KeyEvent.KEYCODE_BUTTON_something olarak adlandırılır), bağlı olan tüm oyunların bu düğmelerden en az 'u desteklemesi gerektiğini anlayabilirim.

Çok güzel bir çözüm değil - eğer bir XBox 360 denetleyiciye ve aynı anda bağlı bir Wiimote varsa, XBox denetleyicisinin 1 veya 2 düğmelerine sahip olmadığını ve Wiimote örneğin X veya Y'ye sahip değildir. Ama en azından bir başlangıç.

Herhangi biri daha iyi bir fikri varsa, lütfen biraz öneri ...

+1

Nihayet, bunu API seviyesi 19 (4.4) içinde InputDevice.hasKeys ile eklediler gibi görünüyor: http://developer.android.com/reference/android/view/InputDevice.html#hasKeys%28int...%29 –