Android sendevent/getevent 用法

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"

表明系统有 7个event设备 ;


在我的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;

具体的type,code,value的定义 可以在源码/frameworks/base/core/java/android/view/KeyEvent.java中找到;

=============================

二、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如下定义
[html] view plaincopy

/*  
 * Event types  
 */  
#define EV_SYN          0x00  
#define EV_KEY          0x01  
#define EV_REL          0x02  
#define EV_ABS          0x03  
#define EV_MSC          0x04  
#define EV_SW           0x05  
#define EV_LED          0x11  
#define EV_SND          0x12  
#define EV_REP          0x14  
#define EV_FF           0x15  
#define EV_PWR          0x16  
#define EV_FF_STATUS        0x17  
#define EV_MAX          0x1f  
#define EV_CNT          (EV_MAX+1) 

一般来说,常用的是EV_KEY, EV_REL, EV_ABS, EV_SYN

分别对应keyboard, 相对坐标, 绝对坐标, 同步事件

EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型

EV_KEY的code比较多,这里就不列出来了,可参照input.h

EV_REL对应的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
sendevent /dev/input/event1: 0000 0000 00000000   // sync事件
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值