我的Android進階之旅------>Android中通過adb shell input來模擬滑動、按鍵、點擊事件

今天在維護公司的一個小項目的時候,發現按公司手機的某個物理按鍵,激活相應的Service後,會在屏幕上模擬的點擊了屏幕的某個座標點。好傢伙,原來是之前該項目的版本是按這個物理按鍵後,會彈出一個對話框,提示用戶需要打開某些服務,然後出於良好的用戶體驗,直接模擬點擊事件,點擊該對話框,不讓用戶做多餘的操作。

但是後期版本的改動,該功能不需要了,但是代碼可能沒有改動完全,因此出現了上述bug。查看代碼發現,原來是執行了下面的代碼才模擬出在屏幕上的點擊事件。

[java] view plain copy
  1. Runtime.getRuntime().exec("input tap " + mPositiveButtonX + " " + mPositiveButtonY);  
其中mPositiveButtonX是要點擊的x座標,mPositiveButtonY是要點擊的y座標。

修復此bug,就是將上述代碼處註釋掉即可。


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

通過這段代碼,我去百度了input事件的相關資料。

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

[plain] view plain copy
  1. C:\Documents and Settings\Administrator>adb shell input help  
  2. Error: Unknown command: help  
  3. Usage: input [<source>] <command> [<arg>...]  
  4.   
  5. The sources are:  
  6.       mouse  
  7.       keyboard  
  8.       joystick  
  9.       touchnavigation  
  10.       touchpad  
  11.       trackball  
  12.       stylus  
  13.       dpad  
  14.       touchscreen  
  15.       gamepad  
  16.   
  17. The commands and default sources are:  
  18.       text <string> (Default: touchscreen)  
  19.       keyevent [--longpress] <key code number or name> ... (Default: keyboard)  
  20.       tap <x> <y> (Default: touchscreen)  
  21.       swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)  
  22.       press (Default: trackball)  
  23.       roll <dx> <dy> (Default: trackball)  

如上,input後可以跟很多參數, text相當於輸入內容,keyevent相當於手機物理或是屏幕按鍵,tap相當於touch事件,swipe相當於滑動。下面我們來學習相應的用法。


1、input text用法

[plain] view plain copy
  1. C:\Documents and Settings\Administrator>adb shell  
  2. shell@lentk6735_66t_l1:/ $ input text OuyangPeng  


如果你此時鼠標是在一個可以輸入文本的文本框之類的控件上,那麼將在該文本框上輸入出 OuyangPeng 字符串。如下圖所示:


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


下面來測試一下:

[plain] view plain copy
  1. shell@lentk6735_66t_l1:/ $ input keyevent 3  
看看,手機是不是回到了主界面。

[plain] view plain copy
  1. shell@lentk6735_66t_l1:/ $ input keyevent 24  
上面是進行音量的加大。此時會彈出音量加減界面,如下所示。



[plain] view plain copy
  1. shell@lentk6735_66t_l1:/ $ input keyevent 25  
  2. shell@lentk6735_66t_l1:/ $ input keyevent 25  
  3. shell@lentk6735_66t_l1:/ $ input keyevent 25  
  4. shell@lentk6735_66t_l1:/ $ input keyevent 25  
  5. shell@lentk6735_66t_l1:/ $ input keyevent 25  
  6. shell@lentk6735_66t_l1:/ $ input keyevent 25  
  7. shell@lentk6735_66t_l1:/ $ input keyevent 25  

上面是進行音量的減小,執行了幾次之後,音量減小到了中間位置。此時會彈出音量加減界面,如下所示。



3、input tab用法

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


然後通過input tap命令模擬觸摸屏幕,代碼如下。

[plain] view plain copy
  1. shell@lentk6735_66t_l1:/ $ input tap 600 800  
其中X座標600,Y座標800正好在“收音機”圖標所在區域,因此執行上述代碼後,會進入“收音機”應用。



4、input swipe用法

input swipe模擬的是滑動事件,input swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen),需要將起始的座標傳進去。


如下面代碼,將會向左滑動

[plain] view plain copy
  1. shell@lentk6735_66t_l1:/ $ input swipe 600 800 300 800  
如下面代碼,將會向右滑動

[plain] view plain copy
  1. 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

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

發佈了53 篇原創文章 · 獲贊 17 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章