安卓getevent和sendevent的使用

本文介绍了安卓系统的输入事件处理机制,包括getevent命令的应用,展示如何查看设备上的输入事件,并通过sendevent命令模拟按键操作实现开关机等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓内部提供了监测和输入事件的函数,通过adb shell进入安卓手机后,输入上诉两个命令可以进行相应的操作。

1.getevent

在平板上的实际操作结果如下:


1

可以看到在/dev/input/节点下有5event设备,所有的外部产生的输入事件都会根据事先的联接将input_event发送到各自的event中,用户空间通过epoll机制监测各个event设备文件的改动情况来读取发内核中的input事件,上报到各个应用程序,从而实现鼠标键盘等动作。

当按下开机键以后,得到如下两段数据:


2

这里首先介绍下input_event结构体,所有的input事件都是由下面的结构体表示:

1. struct input_event {  

2.     struct timeval time;  

3.     __u16 type;  

4.     __u16 code;  

5.     __s32 value;  

6. }; 

Type:表示事件的类型,不是event设备的类型,event设备可以接收多中事件类型,主要如下:

EV_SYN:   0x00用于事件间的分割标志

EV_KEY:   0x01用来描述键盘,按键或者类似键盘设备的状态变化

EV_REL:   0x02用来描述相对坐标轴上数值的变化,比如鼠标

EV_ABS:   0x03用来描述相对坐标轴上数值的变化,例如:描述触摸屏上坐标的值

   

再看图2的看第一行:

/dev/input/event1表示按键最终上报的input设备对象,从图1可知是mtk-kpd,可以认为是按键设备,

后面的三串数据:

0001是事件所对应的type,也就是按键事件

0074 是事件的代码,这里是16进制表示,后面的sendevent需要用10进制注意不同点

00000001是事件的value1表示按下,0表示松开;

第二行的30表示事件的分割,用于区分两次事件。

2.Sendevent

通过getevent知道设备的输入信息后就可以反过来使用sendevent通过adb shell模拟键盘输入实现开关机,输入如下命令即可,

sendevent   /dev/input/event1 01 116 1

sendevent   /dev/input/event1 0 0 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值