17

さて、質問はかなり単純です-Android 2/3/4で左/右/中クリック、ホイール、および(!)ホバー移動をどのように処理できますか。

私はこのトピックを掘り下げていて、次のことを見つけました

  • API 14 では、ファンシーな新しい MotionEvent を使用して、ほとんどすべてを処理できます。
  • API 12以降、USBマウスで問題ないように見えるオープンアクセサリもあります(まだBluetoothがありません)(UPD OAは2.3.4にバックポートされています)
  • mouse は、実際には ICS と Honeycomb と cyanogen 2.3.7 を搭載したタブレットでうまく動作しますが、すべてのボタンを 1 回タッチするだけのように動作します。マウス メッセージを傍受する方法はあるのでしょうか。

Androidの各バージョンでBluetoothとUSBマウスを最も簡単かつ正しい方法で処理する方法を理解してください。あるいは無理だと言う。

UPD2: USB ホストは 3.1+ のみのようですが、USB アクセサリはこのタスクには役に立ちません

4

2 に答える 2

22

これらは私の発見です:

APIレベル<9の場合:

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

APIレベル9以降の場合:

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

APIレベル12以降の場合:

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

APIレベル14以上の場合:

  • 新しい方法MotionEvent.getButtonState()MotionEvent.getActionMasked()これを追跡して、がACTION_MOVEACTION_DOWNまたはのときに一次、二次、三次マウスボタンが押されたかどうかを区別しますACTION_UP

上記で説明した方法ですべてのマウスイベントを追跡できるため、Apiレベル15/16またはツールタイプについては調べていません。誰かが追加情報を持っているか、私が15/16 / tooltypesを見逃しているなら、興味深いでしょう。

于 2012-10-05T10:03:56.520 に答える
1

わかった。私は手がかりを得たと思います。Android 3.x/4.x に関するハイライトを読み、気づいたこと...

  1. Android 3以降ではマウスを使用できますが、古いバージョンではマウスはデバイス固有です

  2. 認識されたマウス イベントを任意のソース (BT または USB) から傍受できます...

2.1. ... onGenericMotionEvent の 3.1 以降の scroll または hover_move

2.2. ... Android 4.0+ でのプライマリ、セカンダリ、およびターシャリ ボタンとホバー入力/終了 (そして最後に TOOL_TYPE_MOUSE 定数)

もう 1 つのオプションは、ホスト モードで Bluetooth ソケットまたは USB からかなり低レベルのデータを解析することです。

私は正しいですか?誰かがより良い解決策を持っているかどうかまだ疑問に思っています。

于 2012-10-03T13:25:31.173 に答える