ADB:如何以编程方式确定哪个输入设备用于通过sendevent发送触摸事件

时间:2019-01-17 02:40:32

标签: android adb

我正在尝试使用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 建议的答案并非在所有情况下都有效,因为它们使用的“名称”字段也取决于设备,并且可能并不总是包含“触摸”,并且该答案中使用的其他任何属性似乎都与触摸设备无关。 / p>

使用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命令,但要这样做,我已经需要知道输入设备了。 / p>

此外,这应该不需要用户部分的任何干预,因此,他们不需要执行水龙头或自己提供输入设备。它需要完全自主。

任何对此的帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

感谢@AlexP。有关命令getevent -pl的相关链接。他链接的SO答案对我来说并不完全有效,因此,我不得不对其进行一些修改。这似乎对我有用。

getevent -pl | awk 'BEGIN { RS="add device "; } /^[0-9]/ { print RS $0; }' | grep -B 100 ABS_MT_POSITION_X | awk '/add device/ {print $NF}'