ADBを使用してイベントタッチを電話に送信しますが、リリースできません


4

CM13を実行しているHTC 10があります。ADBを使用してタッチイベントを送信し、これを送信した後にイベントを送信しようとしています。

adb shell
sendevent /dev/input/event6 3 57 0
sendevent /dev/input/event6 3 53 300
sendevent /dev/input/event6 3 54 400
sendevent /dev/input/event6 3 48 5
sendevent /dev/input/event6 3 58 50
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0

showtouchesがオンの状態で電話をクリックすると、タッチが開始されたことがわかりますが、電話ではタッチがまだアクティブになっています。

ここや他の場所と同様に、ここで読んだことに基づいて、やらなければならないことは次のように思えます。

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0

または多分ただ

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 0 0

ただし、これらのコマンドはどちらも電話でのタッチを終了しません。

電話のシェルスクリプトにこのすべてを入れて、adbシェルからスクリプトを実行しようとしましたが、結果は同じになりました。タッチの始まりであり、終わりではありません。


これがこれを尋ねるのに適切な場所であるかどうかはわかりませんが、私は同じ質問を持っているので、それに賞金をかけました。
オクトーシ

回答:


10

環境はありませんが、問題を調査しました。あなたがやったように、さまざまな記事がありますが、それらは常に一部の人には効果があるように見えますが、他の人には効果がないようです。電話ハードウェア/ Android-バージョン/ SDK-バージョンの組み合わせには違いがあるため、すべてのセットアップに単一のソリューションが存在しないというのが私の結論です。

何があなたのために働くかを見つけなければなりません。ソフトウェアのメジャーアップデートにより、常に開始点に戻れることに注意してください。

私が見つけた最も簡単な方法は、input tap x yコマンドを使用することです:

adb shell input tap x y

すべてのinputバージョンにtapパラメーターがあるわけではありませんが、引数なしで起動すると、使用可能なすべてのパラメーターと構文が出力されます。

shell@m0:/ $ input
input
usage: input ...
       input text <string>
       input keyevent <key code number or name>
       input [touchscreen|touchpad|touchnavigation] tap <x> <y>
       input [touchscreen|touchpad|touchnavigation] swipe <x1> <y1> <x2> <y2> [duration(ms)]
       input trackball press
       input trackball roll <dx> <dy>

もう1つの方法は、Geteventを使用して、画面に触れたときに発生するイベントを記録することです。ここから取られたように

一連のイベントを記録する

  1. ファイルにデータを記録するようにpcをセットアップします(/tmp/android-touch-events.log

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  2. 電話で何かをする
  3. PCでadbコマンドを停止します ctrl-c

記録されたイベントを再生する

このコマンドは、16進変換を行います awk

$ awk '{printf "%s %d %d %d\n", substr($1, 1, length($1) -1), strtonum("0x"$2), strtonum("0x"$3), strtonum("0x"$4)}' /tmp/android-touch-events.log | xargs -l adb shell sendevent

Geteventはパラメーターを16進数で表示しますが、10進数の入力のみを受け入れることに注意してください。上記のスクリプトはこれを修正しようとします。

monkeyrunnerは、ここで示すように、使用できる別のツールです。

次のようにmonkeyrunnerを使用できます。

$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)

ドラッグをしたり、アクティビティを開始したりすることもできます。MonkeyDeviceのAPIを ご覧ください

参照:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.