Androidですべてのマウスイベントを処理する 質問する

Androidですべてのマウスイベントを処理する 質問する

まあ、質問はかなり単純です - 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 の場合:

  • 外部マウスのプライマリ ボタンは、通常の指のタッチと同じように処理されます。マウスを検出する方法はないようです。
  • セカンダリ ボタンは、 を介してディスパッチされますKeyEventKeyEvent.KEYCODE_BACK実際の「戻る」の押下とセカンダリ ボタンの押下を区別する方法はありません。

API レベル 9 以上の場合:

  • 新しいメソッドが追加されましたMotionEvent.getSource()。これを使用して、入力がマウスからのものかどうかを検出します。
  • セカンダリ ボタンは、 を介して引き続きディスパッチされますKeyEventKeyEvent.KEYCODE_BACK一部のデバイスでKeyEvent.getSource()は が を返すInputDevice.SOURCE_MOUSEため、セカンダリ ボタンの検出が機能する場合があります。

API レベル 12 以上の場合:

  • OnGenericMotionListenerが追加されました。これを使用して、 でマウスの動きを検出しACTION_HOVER_MOVE、 でホイールの変化を検出しますACTION_SCROLL

API レベル 14 以上の場合:

  • 新しいメソッド。 が 、 、またはのときに、マウスのプライマリ、セカンダリ、またはターノリ ボタンが押されたかどうMotionEvent.getButtonState()かを区別するためにこれを追跡します。MotionEvent.getActionMasked()ACTION_MOVEACTION_DOWNACTION_UP

私は、上で説明した方法ですべてのマウス イベントを追跡できるため、API レベル 15/16 またはツール タイプについてはまだ調べていません。誰かが追加情報を持っている場合や、15/16/ツール タイプについて私が見逃している情報がある場合は、興味深いと思います。

おすすめ記事