Android getevent/sendevent用法详解
来源:互联网 发布:上海大学网络网址 编辑:程序博客网 时间:2024/05/22 23:35
getevent&sendevent 是android系统下的一个工具,可以 模拟 多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。
这两个命令的源码在system/core/toolbox/下,sendevent.c getevent.c
关于event设备的获取,在 /proc/bus/input/devices 下面:
$ adb shell cat /proc/bus/input/devices
=========================
一、getevent :
获取getevent 的使用方法 : getevent -h
getevent 监控当前的事件, 鼠标事件, 按键事件, 拖动滑动 以及其他类型的event事件;
使用getevent 获得/dev/input/eventX设备 汇报的事件,这个命令会输出所有event设备的 基本信息,如下:
shell@anzhen4_mrd7:/ $ getevent
add device 1: /dev/input/event6
name: "accel"
add device 2: /dev/input/event5
name: "goodix_ts"
add device 3: /dev/input/event0
name: "Power Button"
add device 4: /dev/input/event1
name: "Video Bus"
add device 5: /dev/input/event4
name: "baytrailaudio Intel MID Audio Jack"
add device 6: /dev/input/event2
name: "gpio-lesskey"
add device 7: /dev/input/event3
name: "dollar_cove_power_button"
-----------------------
在我的android设备里,event2 代表 音量加减按键;
shell@anzhen4_mrd7:/ $ getevent /dev/input/event2 &
点击 音量减按键 :
按键 按下的log :
0001 007200000001
0000 0000 00000000
按键 弹起的log :
0001 0072 00000000
0000 0000 00000000
其中/dev/input/event2 是device的名字 ;
0001 是type;
0072 是键码;
最后一个根据type不同 而不同;
比如上面的 00000001 就是按下 音量键的keydown,00000000 是松开 音量键的keyup;
=============================
二、sendevent :
命令格式 : sendevent [device] [type] [code] [value]
需要注意的是在 getevent 中code显示的是十六进制, 而sendevent 中需要用 十进制;
1、模拟发送一个 音量加键:
按下 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000001
/dev/input/event3: 0000 0000 00000000
松开 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000000
/dev/input/event3: 0000 0000 00000000
------------- 模拟 按键 ------------
发送 按下 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 1
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
发送 松开 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 0
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
-------------------------
type, code, value的定义可参看kernel/include/linux/input.h
type如下定义
一般来说,常用的是EV_KEY, EV_REL, EV_ABS, EV_SYN
分别对应keyboard, 相对坐标, 绝对坐标, 同步事件
EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型
EV_SYN对应的code如下
EV_KEY的code比较多,这里就不列出来了,可参照input.h
EV_REL对应的code
EV_ABS对应的code
input keyevent
如果想模拟按键,send event用起来比较繁琐,可以用input keyevent代替
下面是input keyevent几个比较常用的用法:
input keyevent 3 // Home
input keyevent 4 // Back
input keyevent 19 //Up
input keyevent 20 //Down
input keyevent 21 //Left
input keyevent 22 //Right
input keyevent 23 //Select/Ok
input keyevent 24 //Volume+
input keyevent 25 // Volume-
input keyevent 82 // Menu 菜单
用senevent 模拟触屏事件
sendevent /dev/input/event1 0003 0000 0000015e // ABS x 坐标
sendevent /dev/input/event1: 0003 0001 000000df // ABS y 坐标
sendevent /dev/input/event1: 0001 014a 00000001 // BTN touch事件 值为1
sendevent /dev/input/event1: 0003 0018 00000000 // ABS pressure事件
sendevent /dev/input/event1: 0001 014a 00000000 // BTN touch事件 值为0
参考文献
http://blog.csdn.net/wh_19910525/article/details/42240521
Enjoy it !
- Android getevent/sendevent用法详解
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android getevent/sendevent详解
- 51Nod-1449-砝码称重
- Could not load file or assembly 'ExtJS5Example.Bll' or one of its dependencies. An attempt was made
- 数据库多表查询之 where & INNER JOIN
- JSP servlet MVC简单部署说明
- java泛型(三)、通配符的使用
- Android getevent/sendevent用法详解
- 如何实现RESTful Web API的身份验证
- IE6-IE9不支持table.innerHTML的解决方法
- Fresco使用详解
- HDU5893 List wants to travel (树链剖分 + 线段树) 2016 ACM/ICPC Asia Regional Shenyang Online
- 由加密文件引发的一个我无法解释的现象
- 随笔
- 零基础搭建nginx转码服务器
- 探秘Java中的String、StringBuilder以及StringBuffer