Verwenden von ADB zum Senden von Sendevent-Kontakten an das Telefon, kann jedoch nicht freigegeben werden

5900
Chris D

Ich habe ein HTC 10, auf dem CM13 ausgeführt wird. Ich versuche, mithilfe von ADB und Send-Ereignis Berührungsereignisse an dieses zu senden.

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 

Ich bekomme einen Klick auf das Telefon, mit showtouches auf, ich kann sehen, dass die Berührung begonnen hat, aber dass die Berührung auf dem Telefon noch aktiv ist.

Aufgrund meiner Lektüre hier und hier sowie an anderen Orten scheint es mir so, als müsste ich nur folgendes tun:

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

oder vielleicht auch nur

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

Keiner dieser Befehle führt jedoch dazu, dass die Berührung am Telefon beendet wird.

Ich habe versucht, all dies auf einem Shell-Skript auf dem Telefon selbst abzulegen und das Skript von der Adb-Shell aus auszuführen, was jedoch zu demselben Ergebnis führte. Der Anfang der Berührung und nicht das Ende.

2
Ich bin mir nicht sicher, ob dies der richtige Ort ist, um dies zu stellen, aber ich habe die gleiche Frage, also habe ich eine Belohnung darauf gesetzt. oKtosiTe vor 7 Jahren 0

1 Antwort auf die Frage

6
harrymc

Obwohl ich keine Umgebung habe, habe ich mich mit dem Problem befasst. Es gibt verschiedene Artikel, die Sie finden können, die für manche Menschen immer zu funktionieren scheinen, für andere jedoch nicht. Ich bin zu dem Schluss gekommen, dass es Unterschiede zwischen Kombinationen von Telefon-Hardware / Android-Version / SDK-Version gibt, die es so machen, dass es keine Lösung für alle Setups gibt.

Sie müssen herausfinden, was für Sie funktioniert. Bedenken Sie, dass Sie durch ein umfangreiches Update der Software immer wieder zum Ausgangspunkt zurückkehren können.

Die einfachste Methode, die ich gefunden habe, ist die Verwendung des input tap x yBefehls:

adb shell input tap x y 

Nicht alle inputVersionen haben den tapParameter, aber wenn Sie ihn ohne Argumente starten, werden alle verfügbaren Parameter und die Syntax gedruckt:

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> 

Mit Getevent können Sie auch die Ereignisse aufzeichnen, die beim Berühren des Bildschirms auftreten. Wie von hier genommen :

Zeichnen Sie eine Reihe von Ereignissen auf

  1. Einrichten des PCs zum Aufzeichnen von Daten in einer Datei ( /tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log 
  2. mach ein paar Sachen am Telefon
  3. Beenden Sie den ADB-Befehl auf dem PC mit ctrl-c

Wiederholen Sie die aufgezeichneten Ereignisse

Dieser Befehl führt die Hex-Konvertierung aus awk

$ awk '' /tmp/android-touch-events.log | xargs -l adb shell sendevent 

Passen Sie auf, dass Getevent seine Parameter in Hex anzeigt, aber Eingaben nur in Dezimalzahlen akzeptiert, die das obige Skript zu korrigieren versucht.

Monkeyrunner ist ein weiteres Tool, das Sie verwenden können, wie hier gezeigt :

Vielleicht möchten Sie Monkeyrunner wie folgt verwenden :

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

Sie können auch ziehen, Aktivitäten starten usw. Schauen Sie sich die API für MonkeyDevice an .

Verweise: