Я пытаюсь программно определить, какое устройство ввода мне нужно использовать для отправки сенсорных событий (например, касаний, пролистываний и т. Д.) С помощью команды sendevent оболочки adb. Sendevent оболочки adb ожидает устройства ввода, куда оно будет отправлять событие. Пример: "adb shell sendevent / dev / input / event4: 0003 0035 000003b4". Проблема, с которой я сталкиваюсь, заключается в том, что часть «event4» зависит от используемого устройства (телефона, планшета и т. Д.) (Это может быть «event0», «event1» и т. Д.), Поэтому мне нужен способ определить, какое устройство ввода мне нужно использовать для отправки сенсорных событий.
Вещи, которые я пробовал:
Android: программно определяет, подключено ли устройство к сенсорному экрану
Предложенный ответ работает не во всех случаях, поскольку используемое ими поле «Имя» также зависит от устройства и может не всегда включать «Сенсорный», и ни одно из других свойств, используемых в этом ответе, похоже, не соответствует сенсорному устройству.
Использование dumpsys input
. Эта команда дает различные устройства ввода, которые может иметь устройство Android, однако, опять же, ни одно из полей, казалось, не соответствует тому, какое из них является сенсорным устройством.
Использование getevent
и моделирование крана с помощью input tap <x> <y>
. Команда getevent
также перечисляет различные устройства ввода, и при обнаружении события, такого как касание, выводит что-то очень похожее на то, что я хочу. Пример
add device 1: /dev/input/event4
name: "Genymotion Virtual Input"
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 2: /dev/input/event3
name: "VirtualBox mouse integration"
add device 3: /dev/input/event1
name: "Sleep Button"
add device 4: /dev/input/event0
name: "Power Button"
add device 5: /dev/input/event2
name: "AT Translated Set 2 keyboard"
could not get driver version for /dev/input/mice, Not a typewriter
[ 6670.964258] /dev/input/event4: 0001 014a 00000001
[ 6670.964258] /dev/input/event4: 0003 003a 00000001
[ 6670.964258] /dev/input/event4: 0003 0035 000003b4
[ 6670.964258] /dev/input/event4: 0003 0036 000004e2
[ 6670.964258] /dev/input/event4: 0000 0002 00000000
[ 6670.964258] /dev/input/event4: 0000 0000 00000000
[ 6671.027772] /dev/input/event4: 0003 0035 000003b3
[ 6671.027772] /dev/input/event4: 0003 0036 000004df
[ 6671.027772] /dev/input/event4: 0000 0002 00000000
[ 6671.027772] /dev/input/event4: 0000 0000 00000000
[ 6671.041099] /dev/input/event4: 0001 014a 00000000
[ 6671.041099] /dev/input/event4: 0000 0002 00000000
[ 6671.041099] /dev/input/event4: 0000 0000 00000000
Однако команда input tap <x> <y>
по какой-то причине не запускает какой-либо вывод команды getevent
(я предполагаю, что это ожидается, хотя я не могу найти никаких ссылок, поддерживающих это). И единственный способ для меня запустить любой из выходных данных команды getevent
, по-видимому, требует от меня использования команды sendevent
, но для этого мне уже нужно знать устройство ввода.
Кроме того, предполагается, что это не требует какого-либо вмешательства со стороны пользователя, поэтому им не нужно выполнять касания или самостоятельно подавать на устройство ввода. Он должен быть полностью автономным.
Любая помощь с этим будет принята с благодарностью. Спасибо.