まあ、質問はかなり単純です - Android 2/3/4 で左/右/中央クリック、ホイール、(!)ホバー移動をどのように処理できるか。
私はこのトピックについて調べていて、次のものを見つけました
- API 14では、新しいMotionEventでほぼ何でも処理できます。
- また、API 12 以降では USB マウスで問題なく動作する Open Accessory もあります (Bluetooth はまだありません) (UPD OA は 2.3.4 にバックポートされました)
- マウスは、ICS、Honeycomb、Cyanogen 2.3.7 を搭載したタブレットでは実際にうまく動作しますが、すべてのボタンを 1 回タッチしただけのように動作します。マウス メッセージを傍受する方法があるのだろうかと思います。
各バージョンの Android で Bluetooth と USB マウスを最もシンプルかつ適切に操作する方法を教えてください。あるいは不可能だと言うかもしれません。
UPD2: 3.1 以降では USB ホストのみのようですが、USB アクセサリはこのタスクには役に立ちません
ベストアンサー1
私の調査結果は次のとおりです:
API レベル < 9 の場合:
- 外部マウスのプライマリ ボタンは、通常の指のタッチと同じように処理されます。マウスを検出する方法はないようです。
- セカンダリ ボタンは、 を介してディスパッチされます
KeyEvent
。KeyEvent.KEYCODE_BACK
実際の「戻る」の押下とセカンダリ ボタンの押下を区別する方法はありません。
API レベル 9 以上の場合:
- 新しいメソッドが追加されました
MotionEvent.getSource()
。これを使用して、入力がマウスからのものかどうかを検出します。 - セカンダリ ボタンは、 を介して引き続きディスパッチされます
KeyEvent
。KeyEvent.KEYCODE_BACK
一部のデバイスでKeyEvent.getSource()
は が を返すInputDevice.SOURCE_MOUSE
ため、セカンダリ ボタンの検出が機能する場合があります。
API レベル 12 以上の場合:
OnGenericMotionListener
が追加されました。これを使用して、 でマウスの動きを検出しACTION_HOVER_MOVE
、 でホイールの変化を検出しますACTION_SCROLL
。
API レベル 14 以上の場合:
- 新しいメソッド。 が 、 、またはのときに、マウスのプライマリ、セカンダリ、またはターノリ ボタンが押されたかどう
MotionEvent.getButtonState()
かを区別するためにこれを追跡します。MotionEvent.getActionMasked()
ACTION_MOVE
ACTION_DOWN
ACTION_UP
私は、上で説明した方法ですべてのマウス イベントを追跡できるため、API レベル 15/16 またはツール タイプについてはまだ調べていません。誰かが追加情報を持っている場合や、15/16/ツール タイプについて私が見逃している情報がある場合は、興味深いと思います。