Nexus one 忽略通过 ADB 发送的触摸事件

发布于 2024-12-21 01:09:48 字数 1719 浏览 2 评论 0 原文

我正在通过 USB(使用 ADB)将 HTC Nexus One 连接到我的电脑,运行 Android 2.3.6,并启用调试模式。 像这样发送单独的密钥,有效!

adb shell input keyevent 82
adb shell input keyevent 20
adb shell input keyevent 20
adb shell input keyevent 22
adb shell input keyevent 22
adb shell input keyevent 22
adb shell input keyevent 66

但是,发送触摸事件本身失败

adb shell sendevent /dev/input/event3 0003 48 104
adb shell sendevent /dev/input/event3 0003 50 10
adb shell sendevent /dev/input/event3 0003 53 200
adb shell sendevent /dev/input/event3 0003 54 57
adb shell sendevent /dev/input/event3 0000 2 00000000
adb shell sendevent /dev/input/event3 0003 18 47
adb shell sendevent /dev/input/event3 0003 20 00000001
adb shell sendevent /dev/input/event3 0000 0000 00000000
adb shell sendevent /dev/input/event3 0003 48 00000000
adb shell sendevent /dev/input/event3 0003 50 10
adb shell sendevent /dev/input/event3 0003 53 200
adb shell sendevent /dev/input/event3 0003 54 57
adb shell sendevent /dev/input/event3 0000 0002 00000000
adb shell sendevent /dev/input/event3 0003 18 32
adb shell sendevent /dev/input/event3 0003 20 00000000
adb shell sendevent /dev/input/event3 0000 0000 00000000

这是我从 getevents 获得的输出:

add device 1: /dev/input/event6

  name:     "mahimahi-nav"

add device 2: /dev/input/event5

  name:     "mahimahi-keypad"

add device 3: /dev/input/event4

  name:     "proximity"

add device 4: /dev/input/event3

  name:     "synaptics-rmi-touchscreen"

add device 5: /dev/input/event2

  name:     "compass"

add device 6: /dev/input/event1

  name:     "h2w headset"

add device 7: /dev/input/event0

  name:     "lightsensor-level"

有什么想法或想法如何通过 ADB 发送触摸事件?

I'm connecting an HTC Nexus One to my PC via USB (using ADB), running Android 2.3.6, with debug mode enabled.
Sending individual keys as such, Works!

adb shell input keyevent 82
adb shell input keyevent 20
adb shell input keyevent 20
adb shell input keyevent 22
adb shell input keyevent 22
adb shell input keyevent 22
adb shell input keyevent 66

However, Sending Touch events as such, Fails

adb shell sendevent /dev/input/event3 0003 48 104
adb shell sendevent /dev/input/event3 0003 50 10
adb shell sendevent /dev/input/event3 0003 53 200
adb shell sendevent /dev/input/event3 0003 54 57
adb shell sendevent /dev/input/event3 0000 2 00000000
adb shell sendevent /dev/input/event3 0003 18 47
adb shell sendevent /dev/input/event3 0003 20 00000001
adb shell sendevent /dev/input/event3 0000 0000 00000000
adb shell sendevent /dev/input/event3 0003 48 00000000
adb shell sendevent /dev/input/event3 0003 50 10
adb shell sendevent /dev/input/event3 0003 53 200
adb shell sendevent /dev/input/event3 0003 54 57
adb shell sendevent /dev/input/event3 0000 0002 00000000
adb shell sendevent /dev/input/event3 0003 18 32
adb shell sendevent /dev/input/event3 0003 20 00000000
adb shell sendevent /dev/input/event3 0000 0000 00000000

Here is the output I get from getevents:

add device 1: /dev/input/event6

  name:     "mahimahi-nav"

add device 2: /dev/input/event5

  name:     "mahimahi-keypad"

add device 3: /dev/input/event4

  name:     "proximity"

add device 4: /dev/input/event3

  name:     "synaptics-rmi-touchscreen"

add device 5: /dev/input/event2

  name:     "compass"

add device 6: /dev/input/event1

  name:     "h2w headset"

add device 7: /dev/input/event0

  name:     "lightsensor-level"

Any thoughts or ideas how can I send touch events via ADB ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我纯我任性 2024-12-28 01:09:48

我认为您需要设置 X 轴和 Y 轴触摸点,然后尝试发送事件。另外,请确保将其转换

adb shell sendevent /dev/input/event3 0003 48 104
adb shell sendevent /dev/input/event3 0003 50 10
adb shell sendevent /dev/input/event3 0003 53 200
adb shell sendevent /dev/input/event3 0003 54 57
adb shell sendevent /dev/input/event3 0000 2 00000000

为这样的十进制值(就像我只对第一行所做的那样,但您需要对所有行都这样做),

adb shell sendevent /dev/input/event3 3 72 260.

有关更多信息,请查看此链接 http://softteco.blogspot.com/2011/03/android-low-level-shell-click-on-screen.html

I think you need to set your X and Y axis touch points and then try to send the events. Also, make sure that you convert this

adb shell sendevent /dev/input/event3 0003 48 104
adb shell sendevent /dev/input/event3 0003 50 10
adb shell sendevent /dev/input/event3 0003 53 200
adb shell sendevent /dev/input/event3 0003 54 57
adb shell sendevent /dev/input/event3 0000 2 00000000

into decimal values like this (as I did only for first line but you will need to do that for all),

adb shell sendevent /dev/input/event3 3 72 260.

For more information, look at this link http://softteco.blogspot.com/2011/03/android-low-level-shell-click-on-screen.html

眼眸印温柔 2024-12-28 01:09:48

我设法使用以下代码在 Nexus 7 (Android 4.2.0) 中模拟触摸点击:

public static void performClick(int x, int y) {

    try {
        executeCommand("sendevent /dev/input/event0 3 57 21");
        executeCommand("sendevent /dev/input/event0 3 48 9");
        executeCommand("sendevent /dev/input/event0 3 58 182");
        executeCommand("sendevent /dev/input/event0 3 53 " + x);
        executeCommand("sendevent /dev/input/event0 3 54 " + y);
        executeCommand("sendevent /dev/input/event0 0 0 0");
        executeCommand("sendevent /dev/input/event0 3 57 4294967295");
        executeCommand("sendevent /dev/input/event0 0 0 0");

    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TimeoutException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
}

private static void executeCommand(String command) throws InterruptedException, IOException, TimeoutException {
    CommandCapture cmd = new CommandCapture(0, command);
    RootTools.getShell(true).add(cmd).waitForFinish();
}

I managed to simulate a touch click in Nexus 7 (Android 4.2.0) using the following code:

public static void performClick(int x, int y) {

    try {
        executeCommand("sendevent /dev/input/event0 3 57 21");
        executeCommand("sendevent /dev/input/event0 3 48 9");
        executeCommand("sendevent /dev/input/event0 3 58 182");
        executeCommand("sendevent /dev/input/event0 3 53 " + x);
        executeCommand("sendevent /dev/input/event0 3 54 " + y);
        executeCommand("sendevent /dev/input/event0 0 0 0");
        executeCommand("sendevent /dev/input/event0 3 57 4294967295");
        executeCommand("sendevent /dev/input/event0 0 0 0");

    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TimeoutException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
}

private static void executeCommand(String command) throws InterruptedException, IOException, TimeoutException {
    CommandCapture cmd = new CommandCapture(0, command);
    RootTools.getShell(true).add(cmd).waitForFinish();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文