У меня HTC 10, работающий под управлением CM13. Я пытаюсь отправлять на него сенсорные события с помощью ADB и Send Event After отправки этого:
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
Я получаю щелчок на телефоне, при включенном показе касаний я вижу, что касание началось, но оно все еще активно на телефоне.
На основе прочитанногоздесьиздесьа также в других местах, похоже, все, что мне нужно сделать, это:
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, однако это привело к тому же результату. Начало касания, а не конец.
решение1
Хотя у меня нет вашей среды, я изучил этот вопрос. Можно найти различные статьи, как и вы, которые всегда работают для одних людей, но не для других. Я пришел к выводу, что существуют различия между комбинациями оборудования телефона/версии 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>
Другой способ — использоватьGeteventдля записи событий, которые происходят при прикосновении к экрану. Как взято изздесь:
Запишите серию событий
Настройте ПК для записи данных в файл (
/tmp/android-touch-events.log
)$ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
- сделать что-нибудь по телефону
- остановить команду adb на ПК с помощью
ctrl-c
Воспроизвести записанные события
Эта команда выполнит шестнадцатеричное преобразование в
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 отображает свои параметры в шестнадцатеричном формате, но принимает входные данные только в десятичном формате, и приведенный выше скрипт пытается это исправить.
обезьянникэто еще один инструмент, который вы можете использовать, как показаноздесь:
Вы можете использоватьобезьянниктак:
$ monkeyrunner >>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice >>> device = MonkeyRunner.waitForConnection() >>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
Вы также можете выполнять перетаскивание, запускать действия и т. д. Ознакомьтесь с API для MonkeyDevice.
Использованная литература: