Использование ADB для отправки прикосновений к телефону, но не могу выпустить

5857
Chris D

У меня HTC 10 под управлением CM13. Я пытаюсь отправить сенсорные события на него с помощью 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 

Я получаю щелчок по телефону, с включенными показами, я вижу, что касание началось, но это касание все еще активно на телефоне.

Судя по моим прочтениям здесь и здесь, а также в других местах, мне кажется, все, что мне нужно сделать, это:

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, однако это привело к тому же самому. Начало касания, а не конец.

2
Хотя я не уверен, что это правильное место, чтобы задать это, у меня есть тот же вопрос, поэтому я наградил его. oKtosiTe 7 лет назад 0

1 ответ на вопрос

6
harrymc

Хотя не имея вашего окружения, я изучил проблему. Как и вы, можно найти различные статьи, которые, кажется, всегда работают для некоторых людей, но не для других. Я пришел к выводу, что существуют различия между комбинациями аппаратного телефона / 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 для записи событий, которые происходят при касании экрана. Как взято отсюда :

Запишите серию событий

  1. Настройте компьютер для записи данных в файл ( /tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log 
  2. сделать что-нибудь по телефону
  3. остановите команду adb на компьютере с помощью ctrl-c

Воспроизвести записанные события

Эта команда выполнит шестнадцатеричное преобразование в awk

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

Остерегайтесь ошибки, что Getevent отображает свои параметры в шестнадцатеричном виде, но принимает ввод только в десятичном виде, что пытается исправить приведенный выше скрипт.

monkeyrunner - это еще один инструмент, который вы можете использовать, как показано здесь :

Вы можете использовать monkeyrunner, как это:

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

Вы также можете выполнить перетаскивание, запустить активацию и т. Д. Посмотрите API для MonkeyDevice .

Рекомендации: