質問はかなり単純です-左/右/中央のクリック、ホイール、(!)ホバーの移動をどのように処理できますかAndroid 2/3/4。
私はこのトピックを掘り下げていて、次のことを見つけました
Androidの各バージョンでBluetoothとUSBマウスを最も簡単で正しい方法で処理する方法を理解するのを手伝ってください。またはそれは不可能だと言います。
UPD2:3.1以降でのみUSBホストのように見えますが、このタスクにはUSBアクセサリは役に立ちません
これらは私の発見です:
APIレベル<9の場合:
KeyEvent
と_KeyEvent.KEYCODE_BACK
_を介してディスパッチされます。実際の「戻る」押下と2番目のボタン押下を区別する方法はありません。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/tooltypesを見逃しているなら、興味深いでしょう。
OK。手がかりを得たと思います。私は読んだ Androidについてのハイライト 3.x/4.xそしてそれを実現した...
Android 3+でマウスを使用できます。古いバージョンでは、マウスはデバイス固有です。
認識されたマウスイベントを任意のソース(BTまたはUSB)から傍受できます...
2.1。 ... onGenericMotionEventの3.1以降でスクロールまたはhover_move
2.2。 ...プライマリ、セカンダリ、およびターシャリボタンとホバーEnter/Leave in Android 4.0+(そして最後にTOOL_TYPE_MOUSE定数)
もう1つのオプションは、ホストモードでBluetoothソケットまたはUSBからかなり低レベルのデータを解析することです。
私は正しいですか?誰かがより良い解決策を持っているかどうかまだ疑問に思います。