概述
getevent&sendevent 是android系统下的一个工具,可以模拟多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。
在调试按键,触摸屏时非常有用。
=== getevent ===
getevent 监控当前的事件,鼠标事件,按键事件,拖动滑动等,进入shell后执行getevent会列出/dev/input下的所有输入设备及其对应的name,当有
相应的事件是会打印相应的信息,比如按键按下后触摸TP
# getevent
getevent
add device 1: /dev/input/event3
name: "ft5xxx"
add device 2: /dev/input/event5
name: "7k_handset"
add device 3: /dev/input/event4
name: "qrd_keypad"
add device 4: /dev/input/event2
name: "proximity"
add device 5: /dev/input/event1
name: "accelerometer"
add device 6: /dev/input/event0
name: "orientation"
/dev/input/event4: 0001 001e 00000001
/dev/input/event4: 0001 001e 00000000
其中/dev/input/event4是device的名字 0001是type, 001e是键码, 最后一个根据type不同而不同
比如上面的倒数第二条就是按下a键的keydown,最后一个是按下a的keyup
具体的type,code,value的定义可以在源码/frameworks/base/core/java/android/view/KeyEvent.java中找到
=== sendevent ===
命令格式2:adb shell sendevent [device] [type] [code] [value]
发送时间,格式和上面的一样,需要注意的是在get中code显示的是十六进制,而send中需要用十进制,例如
# sendevent /dev/input/event4 1 5 1
这个命令就是发送数字4的keydown消息,所以在屏幕上就会一直打印出很多个4(因为没有发送keyup)
ps:这个在我手机上没有任何效果
如: adb shell sendevent /dev/input/event0 1 229 1 代表按下按下menu键
adb shell sendevent /dev/input/event0 1 229 0 代表按下松开menu键
说明:上述的命令需组合使用
另外所知道的命令如下:
Key Name CODE
MENU 229
HOME 102
BACK (back button) 158
CALL (call button) 231
END (end call button) 107
2. 发送鼠标事件(Touch):
命令格式:adb shell sendevent [device] [type] [code] [value]
情况1:在某坐标点上touch
如在屏幕的x坐标为40,y坐标为210的点上touch一下,命令如下
adb shell sendevent /dev/input/event0 3 0 40
adb shell sendevent /dev/input/event0 3 1 210
adb shell sendevent /dev/input/event0 1 330 1 //touch
adb shell sendevent /dev/input/event0 0 0 0 //it must have
adb shell sendevent /dev/input/event0 1 330 0 //untouch
adb shell sendevent /dev/input/event0 0 0 0 //it must have
注:以上六组命令必须配合使用,缺一不可
情况2:模拟滑动轨迹(可下载并采用aPaint软件进行试验)
如下例是在aPaint软件上画出一条开始于(100,200),止于(108,200)的水平直线
adb shell sendevent /dev/input/event0 3 0 100 //start from point (100,200)
adb shell sendevent /dev/input/event0 3 1 200
adb shell sendevent /dev/input/event0 1 330 1 //touch
adb shell sendevent /dev/input/event0 0 0 0
adb shell sendevent /dev/input/event0 3 0 101 //step to point (101,200)
adb shell sendevent /dev/input/event0 0 0 0
…………………… //must list each step, here just skip
adb shell sendevent /dev/input/event0 3 0 108 //end point(108,200)
adb shell sendevent /dev/input/event0 0 0 0
adb shell sendevent /dev/input/event0 1 330 0 //untouch
adb shell sendevent /dev/input/event0 0 0 0
另外可以使用cat获得对应event设备信息,进入shell后
# cat /proc/bus/input/devices
cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="orientation"
P: Phys=
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=event0 cpufreq
B: EV=9
B: ABS=100 447
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="accelerometer"
P: Phys=
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=event1 cpufreq
B: EV=9
B: ABS=7
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="proximity"
P: Phys=
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=event2 cpufreq
B: EV=9
B: ABS=2000000
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ft5xxx"
P: Phys=
S: Sysfs=/devices/i2c-0/0-0038/input/input3
U: Uniq=
H: Handlers=event3 cpufreq
B: EV=b
B: KEY=0
B: ABS=2650000 3
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="qrd_keypad"
P: Phys=
S: Sysfs=/devices/virtual/input/input4
U: Uniq=
H: Handlers=kbd event4 cpufreq
B: EV=3
B: KEY=2000000 0 40000800 c0040 0 0 4
I: Bus=0000 Vendor=0001 Product=0001 Version=0001
N: Name="7k_handset"
P: Phys=
S: Sysfs=/devices/virtual/input/input5
U: Uniq=
H: Handlers=kbd event5 cpufreq
B: EV=23
B: KEY=4 0 0 0 1c0800 0 0 0
B: SW=4
#
input (开发人员的利器,需要经常输入邮箱、密码,或网址 较长字符时,特别好用)
# input
usage: input [text|keyevent]
input text <string>
input keyevent <event_code>
参考:
http://topic.csdn.net/u/20100326/17/1f0fc5a1-3bd2-4294-aa35-1bcb73357aa3.html
http://www.51testing.com/html/65/n-215865-2.html
最后
以上就是独特秀发为你收集整理的adb getevent/sendevent的全部内容,希望文章能够帮你解决adb getevent/sendevent所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复