今天在維護公司的一個小項目的時候,發現按公司手機的某個物理按鍵,激活相應的Service後,會在屏幕上模擬的點擊了屏幕的某個座標點。好傢伙,原來是之前該項目的版本是按這個物理按鍵後,會彈出一個對話框,提示用戶需要打開某些服務,然後出於良好的用戶體驗,直接模擬點擊事件,點擊該對話框,不讓用戶做多餘的操作。
但是後期版本的改動,該功能不需要了,但是代碼可能沒有改動完全,因此出現了上述bug。查看代碼發現,原來是執行了下面的代碼才模擬出在屏幕上的點擊事件。
- Runtime.getRuntime().exec("input tap " + mPositiveButtonX + " " + mPositiveButtonY);
修復此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 字符串。如下圖所示:
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
- 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
上面是進行音量的減小,執行了幾次之後,音量減小到了中間位置。此時會彈出音量加減界面,如下所示。
3、input tab用法
首先進入到下面界面如下所示:
然後通過input tap命令模擬觸摸屏幕,代碼如下。
- shell@lentk6735_66t_l1:/ $ input tap 600 800
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
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
====================================================================================