【问题标题】:Interpretation of the result of "cat /proc/bus/input/devices" and adb shell commands“cat /proc/bus/input/devices”和adb shell命令的结果解读
【发布时间】:2013-07-09 08:10:27
【问题描述】:

我不确定关于通过 adb 注入事件的问题是否应该在 StackOverflow 或 Android Enthusiasts 中,如果它不属于这里,请移动它。

不管怎样,我的问题如下。

我显然必须确定发送和接收事件的设备“类型”。我显然无法向键盘设备发送触摸事件。

经过大量研究,我找到了sendeventgetevent 命令。

所以,我想向手机的电源按钮发送一个长按。

我目前使用这个:

sendevent /dev/input/event3 1 116 0
sendevent /dev/input/event3 1 116 1

这适用于HTC Wildfire(单击输入设备的链接),因为键盘包含电源按钮,而116 恰好是电源键的扫描码。

我知道 /dev/input/event3/1160 or 1 代表什么。介于/dev/input/event3/116 之间的1 代表什么?如何获得?

转到Nexus 4。现在,我注意到它有一个单独的电源键和键盘处理程序

[编辑]

在 XDA 上找到关于 sendeventgeteventthis

【问题讨论】:

    标签: android shell events adb code-injection


    【解决方案1】:

    1 "in-between /dev/input/event3/ and 116" 代表EV_KEY 事件类型常量:

    • EV_KEY: 用于描述键盘、按钮或其他类似键的状态变化 设备。

    如果您运行 getevent -l /dev/input/event3/ 并按下电源键,您可以自己找到它。

    还要找出电源键输入设备名称,我建议解析getevent -pl 的输出而不是/proc/bus/input/devices 的内容。您正在查找的设备在事件部分中列出了KEY_POWER

    add device X: /dev/input/eventX
      name:     "xxxxxxxxxx"
      events:
        KEY (0001): KEY_POWER
    

    正确的长按电源键顺序(如按住 1 秒钟然后松开)将是:

    sendevent /dev/input/eventX 1 116 1
    sendevent /dev/input/eventX 0 0 0
    sleep 1
    sendevent /dev/input/eventX 1 116 0
    sendevent /dev/input/eventX 0 0 0
    

    注意:getevent -pl 不适用于 Gingerbread 及以下版本。

    【讨论】:

    • 在哪里可以检索特定设备的EV_KEY
    • EV_KEY = 1。它是一个 linux 内核常量。它自成立以来就没有改变,我怀疑它将来会改变。 getevent -pl 输出中的 KEY (0001): 行只是表示 EV_KEY = 0x0001 的简短方式
    • 非常感谢!我确实弄清楚了getevent 位。我不知道在发送实际命令时会有所不同。假设sendevent /dev/input/eventX 0 0 0sleep 1。我的错。
    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多