有一个关于在 android 上发送长按的已回答问题,问题在于
从链接问题上投票最高的答案中,我从以下代码开始:
adb shell sendevent /dev/input/event2 1 172 1
adb shell sendevent /dev/input/event2 0 0 0
timeout 1
adb shell sendevent /dev/input/event2 1 172 0
adb shell sendevent /dev/input/event2 0 0 0
Run Code Online (Sandbox Code Playgroud)
这些命令不起作用,答案的作者也没有透露这些命令的作用和原因。通过一些实验我发现:
/dev/input/event0代替event2adb shell sendevent /dev/input/event2 0 0 0是必须的。它有什么作用我不知道现在我需要发送按键的按键向上/向下事件,包括那些不在设备上的按键(例如KEYCODE_DPAD_DOWN),所以adb shell getevent没有多大帮助 - 我无法按下不存在的按键。我正在使用 Android 4.1.2 三星手机。
还有谁能向我解释一下这是什么0 0 0事件吗?
我很久以前就做过这件事,所以我不记得所有细节。希望我不会错过任何重要的事情......
设备上存在的所有输入硬件都被映射到文件中(它是Linux,所以当然一切都是文件......)。如果你这样做,adb shell ls /dev/input你会看到很少的eventX文件,从上到下event0。这些文件被映射到屏幕(触摸屏,而不是显示器!通常是event2)、硬键(通常是event0)、接近传感器和设备的所有其他传感器/输入。
另一件需要记住的事情是,这些不是“普通”文件,而是“字符文件”——它是一种缓冲区,仅在相关输入设备被激活时才包含数据。您可以键入内容adb shell cat /dev/input/event0,但直到按下设备上的某个物理键(例如home或 )时,您才会看到任何内容vol up。当你按下一个键时,你会在屏幕上看到一些乱码,但这些乱码当然是有意义的。
键入adb pull /dev/input/event0,按下并释放vol up,然后按下ctrl-c停止pull命令。现在您将有一个名为 的二进制文件event0,因此使用十六进制编辑器打开它,您将得到类似 -
59 07 00 00 80 C9 07 00 01 00 18 00 01 00 00 00
59 07 00 00 80 C9 07 00 00 00 00 00 00 00 00 00
5A 07 00 00 96 60 01 00 01 00 18 00 00 00 00 00
5A 07 00 00 96 60 01 00 00 00 00 00 00 00 00 00
每行的前 8 个字节是事件的时间戳,其他 8 个字节是事件本身。
第一行是按键vol. up(小端):
01 00是事件的 ID。如果同时按下两个键,您将获得两个具有两个 ID 的事件。
18 00是关键代码。
01 00是事件类型。01是按下,00(如第 3 行)是释放。
00 00(最后两个字节)此处未使用。例如,对于屏幕触摸,它保存屏幕坐标。
第二行是一些包含全零的缓冲区清理/同步事件。
第三排正在释放钥匙。它与第一行相同,但事件类型为00。
第四行又是同步事件。
现在,如果您创建一个名为 的文件eventFile,其中包含前两行,则实际上有一个按键序列vol. up。您可以通过长按将其注入设备 -adb push eventFile /dev/input/event0您会看到vol. up按键被按下但未释放。要释放它,只需发送另一个包含其他两行的文件。您不必担心时间戳,可以保持原样。对于不同的密钥,您当然
必须更改。
我已经在我的设备上尝试过它 - 三星 S3 mini /4.1.2,带有两个按键,它可以工作。我没有尝试使用不存在的键盘按键。key codevol up/down
| 归档时间: |
|
| 查看次数: |
5949 次 |
| 最近记录: |