簡體   English   中英

ADB shell sendevents不起作用

[英]ADB shell sendevents not working

我正在嘗試使用getevent / sendevent機制在android設備中模擬按鍵。 我看到正在運行的批處理文件之一。 所以我知道adb shell sendevent機制的工作原理。

因此,我做了adb shell Getvent並做了一些按鍵操作,這些事件給了我如下所示:

/

dev/input/event0 0003 0039 0000006c
 /dev/input/event0 0001 014a 00000001
 /dev/input/event0 0001 0145 00000001
 /dev/input/event0 0003 0035 000003f8
 /dev/input/event0 0003 0036 00000153
 /dev/input/event0 0003 0030 00000001
 /dev/input/event0 0003 0031 00000000
 /dev/input/event0 0000 0000 00000000
 /dev/input/event0 0001 014a 00000000
 /dev/input/event0 0001 0145 00000000
 /dev/input/event0 0000 0000 00000000
 /dev/input/event0 0003 0039 0000006d
 /dev/input/event0 0001 014a 00000001
 /dev/input/event0 0001 0145 00000001
 /dev/input/event0 0003 0035 00000278
 /dev/input/event0 0003 0036 0000022c
 /dev/input/event0 0003 0030 00000004
 /dev/input/event0 0003 0031 00000004
 /dev/input/event0 0000 0000 00000000
 /dev/input/event0 0003 0039 ffffffff
 /dev/input/event0 0001 014a 00000000
 /dev/input/event0 0001 0145 00000000
 /dev/input/event0 0000 0000 00000000

所以我復制了相同的事件,並從中制作了一個批處理文件,如下所示:

adb shell sendevent  /dev/input/event0 0003 0039 0000006c
adb shell sendevent /dev/input/event0 0001 014a 00000001
adb shell sendevent /dev/input/event0 0001 0145 00000001
adb shell sendevent /dev/input/event0 0003 0035 000003f8
adb shell sendevent /dev/input/event0 0003 0036 00000153
adb shell sendevent /dev/input/event0 0003 0030 00000001
adb shell sendevent /dev/input/event0 0003 0031 00000000
adb shell sendevent /dev/input/event0 0000 0000 00000000
adb shell sendevent /dev/input/event0 0003 0039 ffffffff
adb shell sendevent /dev/input/event0 0001 014a 00000000
adb shell sendevent /dev/input/event0 0001 0145 00000000
adb shell sendevent /dev/input/event0 0000 0000 00000000
adb shell sendevent /dev/input/event0 0003 0039 0000006d
adb shell sendevent /dev/input/event0 0001 014a 00000001
adb shell sendevent /dev/input/event0 0001 0145 00000001
adb shell sendevent /dev/input/event0 0003 0035 00000278
adb shell sendevent /dev/input/event0 0003 0036 0000022c
adb shell sendevent /dev/input/event0 0003 0030 00000004
adb shell sendevent /dev/input/event0 0003 0031 00000004
adb shell sendevent /dev/input/event0 0000 0000 00000000
adb shell sendevent /dev/input/event0 0003 0039 ffffffff
adb shell sendevent /dev/input/event0 0001 014a 00000000
adb shell sendevent /dev/input/event0 0001 0145 00000000
adb shell sendevent /dev/input/event0 0000 0000 00000000

但是,當我運行此批處理文件時,不會模擬事件。 我在這里想念什么嗎?

謝謝您的建議,我永遠都不會想到這種情況。 它實際上現在可以正常工作,並且因為我之前使用過腳本,所以只需要在字符串中打印十六進制值即可,而python可以完成轉換。 請注意,此系統比輸入分接頭版本快得多。 我可以大約0.3秒的間隔來回發送觸摸事件(我仍然不明白為什么它不能處理更快的序列)

這就是我在運行Android 6.1的Nexus 5上的python中執行的操作:

import os

EV_ABS             = 0x0003
EV_SYN             = 0x0000
ABS_MT_POSITION_X  = 0x0035
ABS_MT_POSITION_Y  = 0x0036
ABS_MT_PRESSURE    = 0x003a
ABS_MT_TOUCH_MAJOR = 0x0030
SYN_REPORT         = 0x0000
ABS_MT_TRACKING_ID = 0x0039

touch_event_id = 1

def touch(x, y):

    global touch_event_id

    event_string =  "sendevent /dev/input/event1 %d %d %d\n" % (EV_ABS, ABS_MT_TRACKING_ID, touch_event_id)
    event_string += "sendevent /dev/input/event1 %d %d %d\n" % (EV_ABS, ABS_MT_POSITION_X,  x)
    event_string += "sendevent /dev/input/event1 %d %d %d\n" % (EV_ABS, ABS_MT_POSITION_Y,  y)
    event_string += "sendevent /dev/input/event1 %d %d %d\n" % (EV_ABS, ABS_MT_PRESSURE,    5)
    event_string += "sendevent /dev/input/event1 %d %d %d\n" % (EV_ABS, ABS_MT_TOUCH_MAJOR, 5)
    event_string += "sendevent /dev/input/event1 %d %d %d\n" % (EV_SYN, SYN_REPORT,         0)

    event_string += "sendevent /dev/input/event1 %d %d %d\n" % (EV_ABS, ABS_MT_TRACKING_ID, -1)
    event_string += "sendevent /dev/input/event1 %d %d %d\n" % (EV_SYN, SYN_REPORT,         0)

    touch_event_id+=1

    os.system('adb shell "%s" &' % event_string)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM