• 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如下定义

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


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















  • 相关阅读:
    NGINX高并发配置
    一致性哈希算法——PHP实现代码
    TCP三次握手详解
    一致性哈希算法——转载来自张洋
    ngx_http_upstream_keepalive
    高情商人的十一种表现
    Nginx中的upstream轮询机制介绍
    主从读写分离----mysql-proxy0.8.5安装与配置
    分布式事务XA
    微信小程序API
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744512.html
Copyright © 2020-2023  润新知