我的Android进阶之旅------>Android中通过adb shell input来模拟滑动、按键、点击事件

今天在维护公司的一个小项目的时候,发现按公司手机的某个物理按键,激活相应的Service后,会在屏幕上模拟的点击了屏幕的某个坐标点。好家伙,原来是之前该项目的版本是按这个物理按键后,会弹出一个对话框,提示用户需要打开某些服务,然后出于良好的用户体验,直接模拟点击事件,点击该对话框,不让用户做多余的操作。

但是后期版本的改动,该功能不需要了,但是代码可能没有改动完全,因此出现了上述bug。查看代码发现,原来是执行了下面的代码才模拟出在屏幕上的点击事件。

Runtime.getRuntime().exec("input tap " + mPositiveButtonX + " " + mPositiveButtonY);
其中mPositiveButtonX是要点击的x坐标,mPositiveButtonY是要点击的y坐标。

修复此bug,就是将上述代码处注释掉即可。


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

通过这段代码,我去百度了input事件的相关资料。

首先在在cmd窗口敲命令:adb shell input help,得到相关的input事件的用法

C:\Documents and Settings\Administrator>adb shell input help
Error: Unknown command: help
Usage: input [<source>] <command> [<arg>...]

The sources are:
      mouse
      keyboard
      joystick
      touchnavigation
      touchpad
      trackball
      stylus
      dpad
      touchscreen
      gamepad

The commands and default sources are:
      text <string> (Default: touchscreen)
      keyevent [--longpress] <key code number or name> ... (Default: keyboard)
      tap <x> <y> (Default: touchscreen)
      swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
      press (Default: trackball)
      roll <dx> <dy> (Default: trackball)

如上,input后可以跟很多参数, text相当于输入内容,keyevent相当于手机物理或是屏幕按键,tap相当于touch事件,swipe相当于滑动。下面我们来学习相应的用法。


1、input text用法

C:\Documents and Settings\Administrator>adb shell
shell@lentk6735_66t_l1:/ $ input text OuyangPeng


如果你此时鼠标是在一个可以输入文本的文本框之类的控件上,那么将在该文本框上输入出 OuyangPeng 字符串。如下图所示:

我的Android进阶之旅------&gt;Android中通过adb shell input来模拟滑动、按键、点击事件

2、 input keyevent用法

先列举 input keyevent 几个比较常用的code值:

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


下面来测试一下:

shell@lentk6735_66t_l1:/ $ input keyevent 3
看看,手机是不是回到了主界面。

shell@lentk6735_66t_l1:/ $ input keyevent 24
上面是进行音量的加大。此时会弹出音量加减界面,如下所示。

我的Android进阶之旅------&gt;Android中通过adb shell input来模拟滑动、按键、点击事件

shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25

上面是进行音量的减小,执行了几次之后,音量减小到了中间位置。此时会弹出音量加减界面,如下所示。

我的Android进阶之旅------&gt;Android中通过adb shell input来模拟滑动、按键、点击事件


3、input tab用法

首先进入到下面界面如下所示:

我的Android进阶之旅------&gt;Android中通过adb shell input来模拟滑动、按键、点击事件

然后通过input tap命令模拟触摸屏幕,代码如下。

shell@lentk6735_66t_l1:/ $ input tap 600 800
其中X坐标600,Y坐标800正好在“收音机”图标所在区域,因此执行上述代码后,会进入“收音机”应用。

我的Android进阶之旅------&gt;Android中通过adb shell input来模拟滑动、按键、点击事件


4、input swipe用法

input swipe模拟的是滑动事件,input swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen),需要将起始的坐标传进去。


如下面代码,将会向左滑动

shell@lentk6735_66t_l1:/ $ input swipe 600 800 300 800
如下面代码,将会向右滑动

shell@lentk6735_66t_l1:/ $ input swipe 300 800 600 800



附录 :input keyevent值所对应的字符

0 -->  "KEYCODE_UNKNOWN"

1 -->  "KEYCODE_MENU"

2 -->  "KEYCODE_SOFT_RIGHT"

3 -->  "KEYCODE_HOME"

4 -->  "KEYCODE_BACK"

5 -->  "KEYCODE_CALL" 

6 -->  "KEYCODE_ENDCALL" 

7 -->  "KEYCODE_0" 

8 -->  "KEYCODE_1" 

9 -->  "KEYCODE_2" 

10 -->  "KEYCODE_3"

11 -->  "KEYCODE_4" 

12 -->  "KEYCODE_5" 

13 -->  "KEYCODE_6" 

14 -->  "KEYCODE_7" 

15 -->  "KEYCODE_8" 

16 -->  "KEYCODE_9" 

17 -->  "KEYCODE_STAR" 

18 -->  "KEYCODE_POUND" 

19 -->  "KEYCODE_DPAD_UP" 

20 -->  "KEYCODE_DPAD_DOWN" 

21 -->  "KEYCODE_DPAD_LEFT" 

22 -->  "KEYCODE_DPAD_RIGHT"

23 -->  "KEYCODE_DPAD_CENTER"

24 -->  "KEYCODE_VOLUME_UP" 

25 -->  "KEYCODE_VOLUME_DOWN" 

26 -->  "KEYCODE_POWER" 

27 -->  "KEYCODE_CAMERA" 

28 -->  "KEYCODE_CLEAR" 

29 -->  "KEYCODE_A" 

30 -->  "KEYCODE_B" 

31 -->  "KEYCODE_C" 

32 -->  "KEYCODE_D" 

33 -->  "KEYCODE_E" 

34 -->  "KEYCODE_F" 

35 -->  "KEYCODE_G" 

36 -->  "KEYCODE_H" 

37 -->  "KEYCODE_I" 

38 -->  "KEYCODE_J" 

39 -->  "KEYCODE_K" 

40 -->  "KEYCODE_L" 

41 -->  "KEYCODE_M"

42 -->  "KEYCODE_N" 

43 -->  "KEYCODE_O" 

44 -->  "KEYCODE_P" 

45 -->  "KEYCODE_Q" 

46 -->  "KEYCODE_R" 

47 -->  "KEYCODE_S" 

48 -->  "KEYCODE_T" 

49 -->  "KEYCODE_U" 

50 -->  "KEYCODE_V" 

51 -->  "KEYCODE_W" 

52 -->  "KEYCODE_X"

53 -->  "KEYCODE_Y" 

54 -->  "KEYCODE_Z" 

55 -->  "KEYCODE_COMMA" 

56 -->  "KEYCODE_PERIOD"

57 -->  "KEYCODE_ALT_LEFT" 

58 -->  "KEYCODE_ALT_RIGHT" 

59 -->  "KEYCODE_SHIFT_LEFT" 

60 -->  "KEYCODE_SHIFT_RIGHT" 

61 -->  "KEYCODE_TAB" 

62 -->  "KEYCODE_SPACE" 

63 -->  "KEYCODE_SYM" 

64 -->  "KEYCODE_EXPLORER" 

65 -->  "KEYCODE_ENVELOPE" 

66 -->  "KEYCODE_ENTER" 

67 -->  "KEYCODE_DEL" 

68 -->  "KEYCODE_GRAVE" 

69 -->  "KEYCODE_MINUS" 

70 -->  "KEYCODE_EQUALS" 

71 -->  "KEYCODE_LEFT_BRACKET" 

72 -->  "KEYCODE_RIGHT_BRACKET" 

73 -->  "KEYCODE_BACKSLASH"

74 -->  "KEYCODE_SEMICOLON" 

75 -->  "KEYCODE_APOSTROPHE"

76 -->  "KEYCODE_SLASH" 

77 -->  "KEYCODE_AT" 

78 -->  "KEYCODE_NUM" 

79 -->  "KEYCODE_HEADSETHOOK" 

80 -->  "KEYCODE_FOCUS"

81 -->  "KEYCODE_PLUS"

82 -->  "KEYCODE_MENU"

83 -->  "KEYCODE_NOTIFICATION"

84 -->  "KEYCODE_SEARCH" 

85 -->  "TAG_LAST_KEYCODE" 


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

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

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

我的Android进阶之旅------&gt;Android中通过adb shell input来模拟滑动、按键、点击事件


上一篇:埃森哲:中国数字消费者信息报告


下一篇:Git学习系列之Windows上安装Git详细步骤(图文详解)