2

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

1 ответ1

8

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .