Acer ICONIA TAB A500 が Android OS 3.1 になったので早速つないでみました。
Android 3.1 からは USB でゲームパッドがつながります。
・Xbox 360 用の USB コントローラ
・Playstation3 用コントローラを USB (有線)接続
どちらもきちんと認識しました。
判定の仕方は下記のとおりです。
ボタン類は通常のキーボードと同じ、onKey~ でキーコードとして通知されます。
十字キーはカーソルキーと同じ KEYCODE_DPAD_UP/DOWN/LEFT/RIGHT
(19~22) です。
そのため取り敢えずつないだけでも HOME 画面などでカーソル移動に使えます。
未確認ですが、おそらく KeyEvent.isGamepadButton() で本来のカーソルキーと 訂正2011/08/10 13:22
区別できると思われます。
ボタン類は専用のキーコード(96~)が割り当てられているようです。
KEYCODE_BUTTON_A 96 □ KEYCODE_BUTTON_B 97 △ KEYCODE_BUTTON_C 98 KEYCODE_BUTTON_X 99 × KEYCODE_BUTTON_Y 100 ◯ KEYCODE_BUTTON_Z 101 KEYCODE_BUTTON_L1 102 KEYCODE_BUTTON_R1 103 KEYCODE_BUTTON_L2 104 KEYCODE_BUTTON_R2 105 KEYCODE_BUTTON_THUMBL 106 KEYCODE_BUTTON_THUMBR 107 KEYCODE_BUTTON_START 108 KEYCODE_BUTTON_SELECT 109 (BACK) KEYCODE_BUTTON_MODE 110 (Xbox) 188 (PS)
Xbox360 と PS3 ほぼ上記のキーアサイン通りなのですが微妙に互換性がありません。
BUTTON_X は 360 だと (X) ボタンで PS3 は (×) バツボタンです。
AB/XY が入れ替わっているような感じです。
360 Pad 中央の Xbox ボタンは KEYCODE_BUTTON_MODE ですが、
PS ボタンは異なる数値 (188) でした。
アナログ操作は onGenericMotionEvent で MotionEvent が来ます。
L/Rトリガは 360 は MotionEvent だけですが PS3 だと
MotionEvent + BUTTON_L2/R2 の両方が返るようです。
もう少し調査が必要ですが、取り敢えず PC 等と操作方法の
互換性が保てるので便利になりそうです。