利用input工具发送按钮事件

有时候在Android开发测试过程中需要用到按键事件,但由于其它原因不是很方便每次都用键盘或鼠标去点击,这里介绍一个adb下的工具--input工具.


使用input工具其实很简单,首先进入adb shell,然后输入:

#input keyevent <keycode>
或者直接在终端下输入:

$adb shell input keyevent <keycode>
其中<keycode>表示按键代码,它值在$ANDOIRD/frameworks/base/include/ui/KeycodeLabels.h头文件中定义,如下:

static const KeycodeLabel KEYCODES[] = {
    { "SOFT_LEFT", 1 },
    { "SOFT_RIGHT", 2 },
    { "HOME", 3 },
    { "BACK", 4 },
    { "CALL", 5 },
    { "ENDCALL", 6 },
    { "0", 7 },
    { "1", 8 },
    { "2", 9 },
    { "3", 10 },
    { "4", 11 },
    { "5", 12 },
    { "6", 13 },
    { "7", 14 },
    { "8", 15 },
    { "9", 16 },
    { "STAR", 17 },
    { "POUND", 18 },
    { "DPAD_UP", 19 },
    { "DPAD_DOWN", 20 },
    { "DPAD_LEFT", 21 },
    { "DPAD_RIGHT", 22 },
    { "DPAD_CENTER", 23 },
    { "VOLUME_UP", 24 },
    { "VOLUME_DOWN", 25 },
    { "POWER", 26 },
    { "CAMERA", 27 },
    { "CLEAR", 28 },
    { "A", 29 },
 { "B", 30 },
 { "C", 31 },
 { "D", 32 },
 { "E", 33 },
 { "F", 34 },
 { "G", 35 },
 { "H", 36 },
 { "I", 37 },
 { "J", 38 },
 { "K", 39 },
 { "L", 40 },
 { "M", 41 },
 { "N", 42 },
 { "O", 43 },
 { "P", 44 },
 { "Q", 45 },
 { "R", 46 },
 { "S", 47 },
 { "T", 48 },
 { "U", 49 },
 { "V", 50 },
 { "W", 51 },
 { "X", 52 },
 { "Y", 53 },
 { "Z", 54 },
 { "COMMA", 55 },
 { "PERIOD", 56 },
 { "ALT_LEFT", 57 },
 { "ALT_RIGHT", 58 },
 { "SHIFT_LEFT", 59 },
 { "SHIFT_RIGHT", 60 },
 { "TAB", 61 },
 { "SPACE", 62 },
 { "SYM", 63 },
 { "EXPLORER", 64 },
 { "ENVELOPE", 65 },
 { "ENTER", 66 },
 { "DEL", 67 },
 { "GRAVE", 68 },
 { "MINUS", 69 },
    { "EQUALS", 70 },
 { "LEFT_BRACKET", 71 },
 { "RIGHT_BRACKET", 72 },
 { "BACKSLASH", 73 },
 { "SEMICOLON", 74 },
 { "APOSTROPHE", 75 },
 { "SLASH", 76 },
 { "AT", 77 },
 { "NUM", 78 },
 { "HEADSETHOOK", 79 },
 { "FOCUS", 80 },
 { "PLUS", 81 },
 { "MENU", 82 },
 { "NOTIFICATION", 83 },
 { "SEARCH", 84 },
 { "MEDIA_PLAY_PAUSE", 85 },
 { "MEDIA_STOP", 86 },
 { "MEDIA_NEXT", 87 },
 { "MEDIA_PREVIOUS", 88 },
 { "MEDIA_REWIND", 89 },
 { "MEDIA_FAST_FORWARD", 90 },
 { "MUTE", 91 },
 { "PAGE_UP", 92 },
 { "PAGE_DOWN", 93 },
 { "PICTSYMBOLS", 94 },
 { "SWITCH_CHARSET", 95 },
 { "BUTTON_A", 96 },
 { "BUTTON_B", 97 },
 { "BUTTON_C", 98 },
 { "BUTTON_X", 99 },
 { "BUTTON_Y", 100 },
 { "BUTTON_Z", 101 },
 { "BUTTON_L1", 102 },
 { "BUTTON_R1", 103 },
 { "BUTTON_L2", 104 },
 { "BUTTON_R2", 105 },
 { "BUTTON_THUMBL", 106 },
 { "BUTTON_THUMBR", 107 },
 { "BUTTON_START", 108 },
 { "BUTTON_SELECT", 109 },
 { "BUTTON_MODE", 110 },
// NOTE: If you add a new keycode here you must also add it to several other files.
 // Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.

 { NULL, 0 }
}; 

input工具不仅在adb shell下使用,在C/C++代码中也可以使用:

sprintf(s_keyArray, "input keyevent %d", keycode);
system(s_keyArray);
这样的话,可以直接向系统发送按键事件。


注:这种方法虽然很简单,但是通过调用外部input工具的话本身需要时间,通过测试的结果是,每次调用input工具发送大概需要350~570ms的样子,因此,还是不能处理需要高速响应按键事件的情况,只有在那种对按键实时性要求不高的场合才适用.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值