Android ADB Shell sendevent 不起作用

Android ADB Shell sendevent 不起作用

我想Samsung Galaxy Tab 2 GT-P5100使用 ADB shell 模拟在运行 Android 4.0.4 的 root 设备上按下电源按钮。

为此,我使用以下命令更改了相关权限:

adb shell
su
chmod 666 /dev/input/event1

我如何知道这是否成功?

我认为以下命令将显示锁定屏幕:

input keyevent 116

我没有收到任何错误,但什么也没有发生......

或者我使用了密钥代码的文本形式,如下所示:

input keyevent KEY_POWER

在这种情况下,输出是Killed-这是什么意思?

最后,我尝试了:

sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0

没有运气 :(

我究竟做错了什么?

getevent -i /dev/input/event1

输出以下内容:

add device 1: /dev/input/event1
  bus:      0000
  vendor:   0000
  product:  0000
  version:  0000
  name:     "sec_key"
  location: ""
  id:       ""
  version:  1.0.1
  events:
    KEY (0001):  0072  0073  0074
  input props:
    <none>

该键0074带有文字标签KEY_POWER

答案1

电源按钮按下包含几个事件。您可以通过输入命令来检查它:

adb shell getevent -l

然后按电源按钮。在 nexus 5 模拟器上,结果是:

/dev/input/event0: EV_KEY KEY_POWER   DOWN                
/dev/input/event0: EV_SYN SYN_REPORT  00000000            
/dev/input/event0: EV_KEY KEY_POWER   UP                  
/dev/input/event0: EV_SYN SYN_REPORT  00000000 

触摸事件输入文件 /dev/input/event 可能因设备而异。在本例中为 event0。

在将事件写入设备之前,您必须更改触摸事件文件的模式:

adb shell
chmod 666 /dev/input/event0

所有键的定义都可以在 http://androidxref.com/4.4_r1/xref/prebuilts/ndk/6/platforms/android-9/arch-arm/usr/include/linux/input.h

sendevent 键的值应该是十进制

为了模拟按下电源按钮,您必须编写所有这些事件:

adb shell sendevent /dev/input/event0 1  116  108                
adb shell sendevent /dev/input/event0 0  0    0            
adb shell sendevent /dev/input/event0 1  116  103                  
adb shell sendevent /dev/input/event0 0  0    0 

我在 Nexus 5 模拟器上测试了它并且它可以运行。

答案2

因为你发送的方式不对。仅仅发送是不够的

sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0

请尝试下面的一个;)

sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 0 0 0 ;sendevent dev/input/event1 1 116 0 ;sendevent dev/input/event1 0 0 0

相关内容