InputEventで入力デバイスを特定する
|MotionEventでマルチタッチを検出する ではidによるマルチタッチ制御の方法を紹介しました。マルチタッチ検出の導入と同時に、入力デバイスを特定するための仕組み、InputEventも追加されています。InputEventはKeyEvent, MotionEventの親クラスで、入力機器に関する情報を持っています。
InputDeviceの主な定数
定数名 | 概要 |
---|---|
SOURCE_DPAD | 513 (0x00000201)十字キー |
SOURCE_KEYBOARD | 257 (0x00000101)キーボード |
SOURCE_MOUSE | 8194 (0x00002002)マウス |
SOURCE_TOUCHPAD | 1048584 (0x00100008)タッチパッド |
SOURCE_TOUCHSCREEN | 4098 (0x00001002)タッチスクリーン |
SOURCE_TRACKBALL | 65540 (0x00010004)トラックボール |
SOURCE_UNKNOWN | 0 (0x00000000)不明なデバイス |
入力デバイス(ソース)を示す定数を抜粋しました。これらの定数値はビット演算のために、キリの良い値になっていません。たとえばSOURCE_KEYBOARDは0x00000101ですが下2桁が入力デバイスの分類(SOURCE_CLASS)を表します。
入力デバイスを特定するためのInputDeviceはInputEvent(MotionEvent, KeyEvent)から取得できます。
以下はサンプルコードです
MotionEventの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Override public boolean onTouchEvent(MotionEvent event) { // InputDeviceの取得 InputDevice inputDevice = event.getDevice(); int deviceId = event.getDeviceId(); // デバイスIDを取得 int source = event.getSource(); Log.d( "TouchEvent" , "Input Device " + deviceId + " Source:" + source + " X:" + event.getX() + ",Y:" + event.getY()); return true ; } |
MotionEvent#getDeviceでInputDeviceを取得できます。同時にgetDeviceIdでデバイスIDを取得していますが、デバイスIDに関しては、どのデバイスからの入力なのか、判断のために利用します(今回は取得して表示)。ユニークであることは保証されていますが、Android端末の種類によって値は異なりますので注意してください。
MotionEvent#getSource()で入力デバイスを取得できます。
Logcat
1 2 | 12 - 20 18 : 44 : 04.613 : DEBUG/TouchEvent( 369 ): Input Device 0 Source: 4098 X: 188.0 ,Y: 213.0 12 - 20 18 : 44 : 04.703 : DEBUG/TouchEvent( 369 ): Input Device 0 Source: 4098 X: 188.0 ,Y: 213.0 |
Source:4098 はSOURCE_TOUCHSCREENですね。
KeyEventの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Override public boolean onKeyDown( int keyCode, KeyEvent event) { // TODO 自動生成されたメソッド・スタブ // InputDeviceの取得 InputDevice inputDevice = event.getDevice(); int deviceId = event.getDeviceId(); // デバイスIDを取得 int source = event.getSource(); Log.d( "KeyEvent" , "Input Device " + deviceId + " Source:" + source + " key:" + event.getKeyCode()); return super .onKeyDown(keyCode, event); } |
KeyEventの場合もMotionEventと同様です。
Sourceは257(=SOURCE_KEYBOARD)です。
Logcat
1 2 | 12 - 20 18 : 44 : 17.772 : DEBUG/KeyEvent( 369 ): Input Device 0 Source: 257 key: 34 12 - 20 18 : 44 : 18.283 : DEBUG/KeyEvent( 369 ): Input Device 0 Source: 257 key: 35 |
One Comment