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@pc7625:/ $ 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@pc7625:/ $ getevent /dev/input/event2 &

点击 音量减按键 :

按键 按下的log :

0001 0072 00000001
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如下定义:

  1. /*  
  2.  * Event types  
  3.  */  
  4. #define EV_SYN          0x00  
  5. #define EV_KEY          0x01  
  6. #define EV_REL          0x02  
  7. #define EV_ABS          0x03  
  8. #define EV_MSC          0x04  
  9. #define EV_SW           0x05  
  10. #define EV_LED          0x11  
  11. #define EV_SND          0x12  
  12. #define EV_REP          0x14  
  13. #define EV_FF           0x15  
  14. #define EV_PWR          0x16  
  15. #define EV_FF_STATUS        0x17  
  16. #define EV_MAX          0x1f  
  17. #define EV_CNT          (EV_MAX+1)  

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

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

 

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

EV_SYN对应的code如下:

  1. /*  
  2.  * Synchronization events.  
  3.  */  
  4. #define SYN_REPORT      0  
  5. #define SYN_CONFIG      1  
  6. #define SYN_MT_REPORT       2  


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

EV_REL对应的code:

  1. /*  
  2.  * Relative axes  
  3.  */  
  4. #define REL_X           0x00  
  5. #define REL_Y           0x01  
  6. #define REL_Z           0x02  
  7. #define REL_RX          0x03  
  8. #define REL_RY          0x04  
  9. #define REL_RZ          0x05  
  10. #define REL_HWHEEL      0x06  
  11. #define REL_DIAL        0x07  
  12. #define REL_WHEEL       0x08  
  13. #define REL_MISC        0x09  
  14. #define REL_MAX         0x0f  
  15. #define REL_CNT         (REL_MAX+1)  


EV_ABS对应的code:

  1. /*  
  2.  * Absolute axes  
  3.  */  
  4.   
  5. #define ABS_X           0x00  
  6. #define ABS_Y           0x01  
  7. #define ABS_Z           0x02  
  8. #define ABS_RX          0x03  
  9. #define ABS_RY          0x04  
  10. #define ABS_RZ          0x05  
  11. #define ABS_THROTTLE        0x06  
  12. #define ABS_RUDDER      0x07  
  13. #define ABS_WHEEL       0x08  
  14. #define ABS_GAS         0x09  
  15. #define ABS_BRAKE       0x0a  
  16. #define ABS_HAT0X       0x10  
  17. #define ABS_HAT0Y       0x11  
  18. #define ABS_HAT1X       0x12  
  19. #define ABS_HAT1Y       0x13  
  20. #define ABS_HAT2X       0x14  
  21. #define ABS_HAT2Y       0x15  
  22. #define ABS_HAT3X       0x16  
  23. #define ABS_HAT3Y       0x17  
  24. #define ABS_PRESSURE        0x18  
  25. #define ABS_DISTANCE        0x19  
  26. #define ABS_TILT_X      0x1a  
  27. #define ABS_TILT_Y      0x1b  
  28. #define ABS_TOOL_WIDTH      0x1c  
  29. #define ABS_VOLUME      0x20  
  30. #define ABS_MISC        0x28  
  31.   ###
  32. #define ABS_MT_TOUCH_MAJOR  0x30    /* Major axis of touching ellipse */  
  33. #define ABS_MT_TOUCH_MINOR  0x31    /* Minor axis (omit if circular) */  
  34. #define ABS_MT_WIDTH_MAJOR  0x32    /* Major axis of approaching ellipse */  
  35. #define ABS_MT_WIDTH_MINOR  0x33    /* Minor axis (omit if circular) */  
  36. #define ABS_MT_ORIENTATION  0x34    /* Ellipse orientation */  
  37. #define ABS_MT_POSITION_X   0x35    /* Center X ellipse position */  
  38. #define ABS_MT_POSITION_Y   0x36    /* Center Y ellipse position */  
  39. #define ABS_MT_TOOL_TYPE    0x37    /* Type of touching device */  
  40. #define ABS_MT_BLOB_ID      0x38    /* Group a set of packets as a blob */  
  41. #define ABS_MT_TRACKING_ID  0x39    /* Unique ID of initiated contact */  
  42. #define ABS_MT_PRESSURE     0x3a    /* Pressure on contact area */  
  43.   ###
  44. #define ABS_MAX         0x3f  
  45. #define ABS_CNT         (ABS_MAX+1)  

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


三、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 菜单

更多的按键事件keycode可参考:http://www.cnblogs.com/mgzc-1508873480/p/7826967.html

 

用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事件

 

Android 使用 sendevent 模拟鼠标和键盘事件

模拟原理是对驱动发送消息,就是linux里面的input子系统。

命令格式: sendevent /dev/input/eventX [type] [key] [value]

其中/dev/input/eventX 对应的是设备,可以用getevent查看可用设备。

type,key,value这些定义在linux源代码里面的input.h文件里面。

例:发送一个鼠标单击事件

  1. sendevent /dev/input/event0 1 272 1 //1表示发送按键,272是鼠标左键,1表示按下

  2. sendevent /dev/input/event0 0 0 0 //上报事件

  3. sendevent /dev/input/event0 1 272 0

  4. sendevent /dev/input/event0 0 0 0

例2: 发送鼠标右移事件

    sendevent /dev/input/event4 2 0 1 //鼠标右移
    sendevent /dev/input/event4 0 0 0 //上报事件


而在linux里面也有类似的用法,linux应用可以使用uinput模拟按键。

The Linux 2.6.x provides a “uinput” driver, which helps users to inject data to the Linux kernel. 
This is very useful while writing applications to interface customized input devices like wireless 
joystick, keyboard etc. 

 

智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值