利用input工具發送按鈕事件

原文地址:http://blog.csdn.net/flydream0/article/details/7468637


有時候在Android開發測試過程中需要用到按鍵事件,但由於其它原因不是很方便每次都用鍵盤或鼠標去點擊,這裏介紹一個adb下的工具--input工具.


使用input工具其實很簡單,首先進入adb shell,然後輸入:

[plain] view plain copy
  1. #input keyevent <keycode>  
或者直接在終端下輸入:

[plain] view plain copy
  1. $adb shell input keyevent <keycode>  
其中<keycode>表示按鍵代碼,它值在$ANDOIRD/frameworks/base/include/ui/KeycodeLabels.h頭文件中定義,如下:

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

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

[cpp] view plain copy
  1. sprintf(s_keyArray, "input keyevent %d", keycode);  
  2. system(s_keyArray);  
這樣的話,可以直接向系統發送按鍵事件。


注:這種方法雖然很簡單,但是通過調用外部input工具的話本身需要時間,通過測試的結果是,每次調用input工具發送大概需要350~570ms的樣子,因此,還是不能處理需要高速響應按鍵事件的情況,只有在那種對按鍵實時性要求不高的場合才適用.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章