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 等と操作方法の
互換性が保てるので便利になりそうです。