1

Android にマルチタッチ ジェスチャを挿入する方法を探しています。これまでのところ、/dev/uinput を開き、ファイル記述子に書き込みます。このソリューションは「ワンタッチ」で機能します。マルチタッチ入力を挿入するには?

4

2 に答える 2

4

私の経験では/dev/uinput、タッチ ジェスチャは難しいでしょう。一部のデバイスでのみ機能するシングル タッチを実装しました。他のものでは、「ホバー」の効果しかありません。

次に、Androidのタッチデバイスを使用しまし/dev/input/eventXた(ルートアクセスがあれば可能です)。タッチ入力がどのように機能しているかを確認する最善の方法はgetevent /dev/input/eventX、デバイス自体でバイナリを使用することです。Linuxのマルチタッチ プロトコル入力では、マルチタッチの機能と動作が非常にうまく説明されてgeteventおり、16 進コードを解読した後に表示される内容の背景がよくわかります (そして、それらを のようなより意味のあるものに変換しますABS_MT_POSITION_X)。

要するに:

  1. どの/dev/input/eventXデバイスがタッチ入力デバイスであるかを調べます。ABS_MT_* イベントを登録したデバイスです。getevent -ilこれはコマンドで確認できます( で実行adb shell)
  2. そのようなイベントをサポートする入力デバイスが/dev/input/event2.
  3. getevent /dev/input/event2からコマンドを発行しadb shell、画面に触れます。
  4. 次の 3 つの列を含む出力が画面に表示されます。
    1. イベント カテゴリ( の場合EV_ABS、これは です0003
    2. イベントコード(ABS_MT_SLOTこれは0x002f
    3. イベント値 (スロット番号、座標、圧力、またはイベントが定義するもの)
  5. イベントがどのように見えるかを見て、それらを再生してください。この方法で、マルチタッチ イベントとジェスチャを挿入できます。

getevent /dev/input/event2たとえば、ダブルタップの注釈付き出力:

0003 002f 00000001 // slot 1 (finger 1)
0003 0039 000019fe // tracking id for slot 1
0003 0035 00000146 // position x
0003 0036 00000117 // position y
0003 0030 00000033 // touch area
0000 0000 00000000 // sync
0003 002f 00000000 // slot 0 (finger 0)
0003 0039 000019ff // tracking id for slot 0
0003 0035 000000cb // position x
0003 0036 00000164 // position y
0003 0030 00000028 // touch area
0000 0000 00000000 // sync
0003 0039 ffffffff // relese finger 0
0000 0000 00000000 // sync
0003 002f 00000001 // slot 1
0003 0039 ffffffff // release finger 1
0000 0000 00000000 // sync
于 2014-06-11T21:38:18.487 に答える
0

これが機能するかどうかはわかりませんが(アプリからこれを実行していると想定しています)、同時に実行される(そして/ dev / uinputに書き込む)一連のAsyncTasksを使用して、同時タッチをシミュレートできます。

于 2013-01-22T00:42:53.860 に答える