2013-01-08 61 views
8

瞭解ADB Shell Input Events中描述的基本密鑰映射,我對文本輸入和特殊鍵的模擬效果非常好。但是Unicode字符呢?例如,我想使用德語QWERTZ鍵盤佈局的元音變音。adb shell輸入unicode字符

這讓我:

$ adb shell input text ö 
Killed 

所以它似乎崩潰和輸入

adb shell input text \xFC 

打印XFC。我試圖與getevent的事件,但我還沒有找到一個直接的映射,我也看着keymap文件/system/usr/keylayout/Qwerty.kl

我相信唯一的可能性是通過剪貼板,但正如在問題中指出的Pasting text into Android emulator clipboard using adb shell它似乎不知道如何使用它的Android冰淇淋三明治或更高版本..

回答

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將unicode字符發送到editText視圖。

例如, adb shell am broadcast -a ADB_INPUT_TEXT --es msg「你好嗎!你好!」

這裏是GitHub的項目: https://github.com/senzhk/ADBKeyBoard

希望這個小項目會有所幫助。

+0

非常感謝您在android中修補缺陷。你是真正的mvp! –

4

其實ADBKeyBoard非常好!感謝Eric Tang!

舒適的使用一些有用的擴展:

切換到ADBKeyBoard亞行:

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

檢查可用的文件虛擬鍵盤:

ime list -a 

使用簡單的報價人物 - 而不是雙倍於上面的例子 - 如果你的shell不接受「!」 (說明符號)

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 

利用亞行通過WiFi來簡化你的生活......:)

+3

這需要將應用程序安裝在設備上。使用「adb」本身沒有辦法實現它嗎? –

+0

謝謝,我不知道adb現在可以連接WIFI,它幫助我很多。 – zw963