2013-01-08 16 views
8

ADB Shell Input Events में वर्णित मूल कुंजी मैपिंग को जानना मुझे टेक्स्ट इनपुट और विशेष कुंजियों का अनुकरण मिलता है जो अच्छी तरह से काम कर रहा है। लेकिन यूनिकोड पात्रों के बारे में क्या? उदाहरण के लिए मैं जर्मन QWERTZ कीबोर्ड लेआउट से umlauts का उपयोग करना चाहता हूँ।एडीबी शैल इनपुट यूनिकोड चरित्र

यह मैं हो जाता है:

$ adb shell input text ö 
Killed 

तो यह और दुर्घटना करने लगता है इनपुट पर

adb shell input text \xFC 

प्रिंट xFC। मैं getevent के साथ घटनाओं की कोशिश की है, लेकिन मैं एक सीधा मानचित्रण नहीं मिला है, मैं भी keymapping फ़ाइल /system/usr/keylayout/Qwerty.kl

मेरा मानना ​​है कि केवल संभावना क्लिपबोर्ड के माध्यम से है देखा है, लेकिन जैसा कि प्रश्न में बताया Pasting text into Android emulator clipboard using adb shell यह अज्ञात प्रतीत होता है कि एंड्रॉइड आइसक्रीम सैंडविच या बाद में इसका उपयोग कैसे किया जाए ..

उत्तर

3

input काम नहीं करेगा क्योंकि यह केवल वर्चुअल कीबोर्ड के माध्यम से एकल कुंजी ईवेंट भेज सकता है (यदि आप नहीं करते हैं तो स्रोत कोड देखें पता है क्या मेरा मतलब है)।

मुझे लगता है कि एक ही रास्ता छोड़ दिया इंस्ट्रुमेंटेशन उपयोग कर रहा है। मैं तुम्हें अपने गतिविधि के लिए एक परीक्षण बना सकते हैं लगता है और फिर कुछ इस तरह करते हैं:

   final Instrumentation instrumentation = getInstrumentation(); 
       final long downTime = SystemClock.uptimeMillis(); 
       final long eventTime = SystemClock.uptimeMillis(); 

       final KeyEvent altDown = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_DOWN, 
         KeyEvent.KEYCODE_GRAVE, 1, KeyEvent.META_ALT_LEFT_ON); 
       final KeyEvent altUp = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_UP, 
         KeyEvent.KEYCODE_GRAVE, 1, KeyEvent.META_ALT_LEFT_ON); 

       instrumentation.sendKeySync(altDown); 
       instrumentation.sendCharacterSync(KeyEvent.KEYCODE_A); 
       instrumentation.sendKeySync(altUp); 
       instrumentation.sendKeySync(altDown); 
       instrumentation.sendCharacterSync(KeyEvent.KEYCODE_E); 
       instrumentation.sendKeySync(altUp); 
       instrumentation.sendKeySync(altDown); 
       instrumentation.sendCharacterSync(KeyEvent.KEYCODE_I); 
       instrumentation.sendKeySync(altUp); 
       instrumentation.sendKeySync(altDown); 
       instrumentation.sendCharacterSync(KeyEvent.KEYCODE_O); 
       instrumentation.sendKeySync(altUp); 
       instrumentation.sendKeySync(altDown); 
       instrumentation.sendCharacterSync(KeyEvent.KEYCODE_U); 
       instrumentation.sendKeySync(altUp); 

यह संशोधित कुंजी भेज देंगे: AEIOU

+0

हालांकि यह आपके द्वारा लिखे गए उच्चारण अक्षरों के लिए काम करता प्रतीत होता है, मुझे नहीं लगता कि यह जर्मन उमोट्स जैसे äöü के लिए काम करता है। क्या आप जानते हैं कि इनका उत्पादन करने के लिए किस महत्वपूर्ण संयोजन का उपयोग करना है? –

12

मैं एक वर्चुअल कीबोर्ड कि आशय प्रसारण स्वीकार लिखा था, ताकि आप एडीबी के माध्यम से संपादन टेक्स्ट दृश्य में यूनिकोड वर्ण भेज सकें।

उदा। एडीबी खोल प्रसारण किया गया है- ADB_INPUT_TEXT --es msg "你 好嗎! हैलो!" https://github.com/senzhk/ADBKeyBoard

आशा इस छोटे से परियोजना में मदद मिलेगी:

यहाँ GitHub परियोजना है।

+0

एंड्रॉइड में कमी को पकड़ने के लिए बहुत बहुत धन्यवाद। आप असली एमवीपी हैं! –

4

दरअसल एडीबीकेबोर्ड बहुत अच्छा है! एरिक टैंग के लिए धन्यवाद!

आरामदायक उपयोग के लिए कुछ उपयोगी एक्सटेंशन: एडीबी से ADBKeyBoard को

स्विच:

adb shell ime set com.android.adbkeyboard/.AdbIME 

की जाँच करें अपने उपलब्ध le वर्चुअल कीबोर्ड:

ime list -a 

उपयोग सरल बोली पात्रों -not ऊपर उदाहरण के रूप में दोगुना- यदि आपका खोल "स्वीकार नहीं करता है"! (विवरण के हस्ताक्षर) वापस मूल वर्चुअल कीबोर्ड को

adb shell am broadcast -a ADB_INPUT_TEXT --es msg 'Accented characters here' 

स्विच: (मेरे मामले में Swype ...) वाईफ़ाई से अधिक एडीबी

adb shell ime set com.nuance.swype.dtc/com.nuance.swype.input.IME 

उपयोग अपने जीवन को आसान बनाने के ...:)

+3

इसके लिए ऐप को डिवाइस पर इंस्टॉल करने की आवश्यकता है। क्या "adb" का उपयोग करके इसे हासिल करने का कोई तरीका नहीं है? –

+0

धन्यवाद, मुझे नहीं पता कि एडीबी अब पहले वाईफ़ाई से जुड़ सकता है, इससे मुझे बहुत मदद मिलती है। – zw963

संबंधित मुद्दे