एडीबी शेल इनपुट इवेंट्स


222

adb shell input keyeventऔर के बीच बुनियादी अंतर क्या है adb shell sendevent? किसी पात्र को इनपुट करने के लिए मुझे किसका उपयोग करना चाहिए? क्या कीकोड वही हैं जो हम दोनों कमांड को पास करते हैं?

जवाबों:


417

द्वारा adb shell input keyevent, या तो एक event_codeया stringडिवाइस के लिए भेजा जाएगा।

usage: input [text|keyevent]
  input text <string>
  input keyevent <event_code>

इसके लिए कुछ संभावित मान event_codeहैं:

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"

sendeventउपयोगिता स्पर्श या कीबोर्ड की घटनाओं, साथ ही हार्डवेयर घटनाओं का अनुकरण के लिए अन्य घटनाओं भेजता है। विवरण के लिए इस लेख का संदर्भ लें: Android, निम्न स्तर स्क्रीन पर क्लिक करें


1
हाय @chwentong! क्या आप कृपया "इनपुट टेक्स्ट <string>" अधिक विस्तृत तरीके से समझाने के लिए किसी भी स्थान पर इंगित करने में मेरी मदद कर सकते हैं? मुझे इसके बारे में कुछ भी नहीं मिल रहा है, जैसे डेवलपर. android.com/reference/android/view/KeyEvent.html धन्यवाद!
छंद

नमस्ते! क्या मैं पूछ सकता हूं कि मैं एक विंडोज़ कमांड लाइन कंसोल में स्ट्रिंग युक्त स्थान कैसे दर्ज कर सकता हूं? मैं प्रवेश करने की कोशिश करता हूं >adb shell input text "a b"लेकिन काम नहीं करता।
वी यांग

1
आपको "इनपुट" कमांड की जानकारी कहां से मिली? प्रलेखन से अन्य कौन सी सुविधाएँ छिपी हैं (यहाँ: developer.android.com/tools/help/adb.html )?
एंड्रॉयड डेवलपर

4
@WeiYang, इसे आज़माएँ,> adb शेल इनपुट टेक्स्ट "a% sb"
नेटन लोटेरियो

3
जब मेरी एंड्रॉइड टैबलेट की स्क्रीन टूट गई और यह स्पर्श करने के लिए प्रतिक्रिया नहीं देगा तो यह पोस्ट बहुत सहायक थी। मैं एडीबी शेल इनपुट कीवेंट का उपयोग करके पिन को "टाइप" करने में सक्षम था और अपना रास्ता ढूंढ रहा था। धन्यवाद!
j0aqu1n

194

अद्यतन कर रहा है:

का उपयोग कर adb shell input:

टेक्स्ट डालें:

adb shell input text "insert%syour%stext%shere"

(अवलोकन:% s का अर्थ है SPACE)

..

घटना कोड:

adb shell input keyevent 82

(82 ---> MENU_BUTTON)

"अधिक कुंजी कोड के लिए नीचे दी गई सूची देखें"

..

ठोकर एक्स, वाई स्थिति:

adb shell input tap 500 1450

सटीक X खोजने के लिए, Y स्थिति जिस पर आप टैप करना चाहते हैं:

सेटिंग> डेवलपर विकल्प> विकल्प की जांच करें विकल्प

..

स्वाइप X1 Y1 X2 Y2 [अवधि (ms)]:

adb shell input swipe 100 500 100 1450 100

इस उदाहरण में X1 = 100, Y1 = 500, X2 = 100, Y2 = 1450, अवधि = 100ms

..

LongPress XY:

adb shell input swipe 100 500 100 500 250

हम लंबे प्रेस का अनुकरण करने के लिए एक ही कमांड का उपयोग स्वाइप के लिए करते हैं

इस उदाहरण में X = 100, Y = 500, अवधि = 250ms

..

इवेंट कोड अपडेट की गई सूची:

0 -->  "KEYCODE_0" 
1 -->  "KEYCODE_SOFT_LEFT" 
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 -->  "KEYCODE_MEDIA_PLAY_PAUSE"
86 -->  "KEYCODE_MEDIA_STOP"
87 -->  "KEYCODE_MEDIA_NEXT"
88 -->  "KEYCODE_MEDIA_PREVIOUS"
89 -->  "KEYCODE_MEDIA_REWIND"
90 -->  "KEYCODE_MEDIA_FAST_FORWARD"
91 -->  "KEYCODE_MUTE"
92 -->  "KEYCODE_PAGE_UP"
93 -->  "KEYCODE_PAGE_DOWN"
94 -->  "KEYCODE_PICTSYMBOLS"
...
122 -->  "KEYCODE_MOVE_HOME"
123 -->  "KEYCODE_MOVE_END"

आदेशों की पूरी सूची यहां पाई जा सकती है: http://developer.android.com/reference/android/view/KeyEvent.html


1
यह सूची स्पष्ट रूप से बाद के एंड्रॉइड संस्करणों के लिए अधिक लंबी है, उदाहरण के लिए 4.2.2 के लिए हम उन्हें android.view.KeyEvent.java में पा सकते हैं , जहां वे 219 तक
पहुंचते हैं

स्वाइप कमांड के लिए धन्यवाद, मैं बहुत कुछ खोज रहा था।
डेविड

डेवलपर विकल्पों में, स्पर्श घटनाओं को इनपुट करते समय सही निर्देशांक निर्धारित करने के लिए "पॉइंटर स्थान" को सक्षम करें।
डिक लुकास

बस अतिरिक्त जानकारी के लिए। स्वाइप केवल मेरे फोन पर काम करता है अगर समय 120 से बड़ा था !! adb shell input swipe 200 800 200 400 200
जोस रोड्रिग्स

74

इसके अलावा, यदि आप इनपुट कमांड के साथ एम्बेडेड स्पेस भेजना चाहते हैं, तो% s का उपयोग करें

adb shell input text 'this%sis%san%sexample'   

निकलेगा

this is an example 

इनपुट किया जा रहा है।

%खुद को भागने की जरूरत नहीं है - केवल विशेष %sजोड़ी को विशेष रूप से व्यवहार किया जाता है। यह पाठ्यक्रम के स्पष्ट प्रश्न की ओर जाता है कि शाब्दिक स्ट्रिंग कैसे दर्ज करें %s... जो आपको दो अलग-अलग कमांडों के साथ करना होगा।


किसी भी तरह से ऑटो को बंद करने का तरीका? अन्यथा महान काम करता है :)
पैट्रिक बूस

यहां भागने की देखभाल करने के लिए एक सरल बैश स्क्रिप्ट है, इसलिए आप बस कह सकते हैं atext "Hey, I'm here"और यह काम करता है।
डेन डस्केलस्कु

12

वैसे, यदि आप डिवाइस पर दोहरे उद्धरण चिह्नों को भेजने का एक तरीका खोजने की कोशिश कर रहे हैं, तो निम्न प्रयास करें:

adb शेल इनपुट टेक्स्ट '\ "

मुझे यकीन नहीं है कि उद्धरणों के लिए कोई ईवेंट कोड क्यों नहीं है, लेकिन यह समाधान कार्य करता है। इसके अलावा, अगर आप मंकीडेवाइस (या चिम्पचैट) का उपयोग कर रहे हैं, तो आपको मंकीडेवाइस टाइप करने से पहले प्रत्येक बैक्टीरिया का परीक्षण करना चाहिए, अन्यथा जब आप भेजने की कोशिश करते हैं तो आपको कुछ नहीं मिलता है।


1
मैंने सभी भागने से ध्यान हटाने के लिए एक सरल बैश स्क्रिप्ट बनाई है , इसलिए आप बस कह सकते हैं atext "Hey, I'm here"और यह काम करता है।
डेन डस्केलस्कु

9

एक अन्य अंतर:

  • " एडीबी शेल इनपुट " एंड्रॉइड फ्रेमवर्क के जावा लेयर से कीकोड को प्रोसेस करने और भेजने के लिए input.jar को कॉल कर रहा है।
  • " adb sendevent " वास्तव में c कोड (टूलबॉक्स उपयोगिता का हिस्सा) है जो सीधे इनपुट कोड को Linux इनपुट सबसिस्टम के / dev / input .... में भेजता है।

AOSP फ्रेमवर्क में अधिक विस्तार कोड ट्रेस यहां पाया जा सकता है:

http://www.srcmap.org/sd_share/4/aba57bc6/AOSP_adb_shell_input_Code_Trace.html#RefId=7c8f5285


तो संक्षेप में Sendevent adb इनपुट की तुलना में तेजी से रास्ता है!
जेरी गोयल

7

मैंने शेल उपयोगकर्ताओं को शेल इनपुट ईवेंट्स की चाबियाँ मैप करने के लिए विंडोज़ उपयोगकर्ताओं के लिए एक सरल पॉवर्सशेल स्क्रिप्ट लिखी। और लैन पर दूरस्थ रूप से एक एंड्रॉइड डिवाइस को नियंत्रित करता है। मुझे नहीं पता कि किसी को यह उपयोगी लगता है, लेकिन मैं इसे वैसे भी साझा करूँगा।

$ip = 192.168.1.8
cd D:\Android\android-sdk-windows\platform-tools\; .\adb.exe disconnect $ip; .\adb.exe connect $ip
$adbKeyNum = @{LeftWindows = "1"; F1 = "3"; Enter = "66"; UpArrow = "19"; DownArrow = "20"; LeftArrow = "21"; RightArrow = "22"; Add = "24";
        Subtract = "25"; Backspace = "4"; P = "26"}

while(1 -eq 1){
    $keyPress = [Console]::ReadKey($true).Key
    if ([string]$keyPress -eq "F10"){
        .\adb.exe disconnect $ip
        exit
    }
    elseif ([string]$keyPress -eq "F6"){
        $string = Read-Host -Prompt 'Input the string: '
        .\adb.exe shell input text $string
    }
    elseif ($adbKeyNum.ContainsKey([string]$keyPress)){
        echo $adbKeyNum.Get_Item([string]$keyPress)
        .\adb.exe shell input keyevent $adbKeyNum.Get_Item([string]$keyPress)
    }
}

4

यदि आप कई डिवाइस कनेक्ट होने पर विशिष्ट डिवाइस पर एक पाठ भेजना चाहते हैं। सबसे पहले एडीबी उपकरणों का उपयोग कर संलग्न उपकरणों के लिए देखो

adb devices
List of devices attached
3004e25a57192200        device
31002d9e592b7300        device

फिर अपनी विशिष्ट डिवाइस आईडी प्राप्त करें और निम्नलिखित का प्रयास करें

adb -s 31002d9e592b7300 shell input text 'your text'

यह आपका% पाठ होना चाहिए
royatirek

2

एंड्रॉइड डिवाइस में चल रहे रिएक्ट-नेटिव ऐप पर पुनः लोड कॉल भेजने के लिए: adb shell input keyboard text "rr"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.