【发布时间】:2023-04-10 03:08:02
【问题描述】:
我正在尝试使用 adb shell 的 sendevent 命令以编程方式确定我需要使用哪个输入设备来发送触摸事件(即点击、滑动等)。 adb shell 的 sendevent 需要一个输入设备,它将发送事件。示例:“adb shell sendevent /dev/input/event4: 0003 0035 000003b4”。我遇到的问题是“event4”部分取决于正在使用的设备(手机、平板电脑等)(可能是“event0”、“event1”等),所以,我想要的是一种方法确定我需要使用哪个输入设备来发送触摸事件。
我尝试过的事情: Android: Programmatically detect if device has hardware touchscreen connected 建议的答案并非在所有情况下都有效,因为他们使用的“名称”字段也取决于设备,并且可能并不总是包含“触摸”,并且该答案中使用的其他属性似乎都与触摸设备无关。
使用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 命令,但要这样做,我已经需要知道输入设备。
此外,这应该不需要用户的任何干预,因此,他们不需要执行点击或自己提供输入设备。它需要完全自主。
对此的任何帮助将不胜感激。谢谢。
【问题讨论】:
-
感谢@AlexP。他们给出的命令对我来说并不完全有效,但是,我能够制作自己的 getevent -pl info 解析器,它对我有用。