adb shell输入unicode字符

时间:2013-01-08 21:43:12

标签: android text unicode adb

了解ADB Shell Input Events中描述的基本键映射我得到了文本输入和特殊键的模拟效果。但是Unicode字符怎么样?例如,我想使用德国QWERTZ键盘布局的变音符号。

这让我:

$ adb shell input text ö
Killed

所以它似乎崩溃了

adb shell input text \xFC

在输入上打印xFC。我已尝试使用getevent的事件,但我没有找到直接映射,我还查看了键映射文件/system/usr/keylayout/Qwerty.kl

我相信唯一的可能性是通过剪贴板,但正如问题Pasting text into Android emulator clipboard using adb shell所指出的,似乎不知道如何将其用于Android冰淇淋三明治或更晚......

4 个答案:

答案 0 :(得分:13)

我编写了一个接受广播意图的虚拟键盘,因此您可以通过adb将unicode字符发送到editText视图。

例如 adb shell am broadcast -a ADB_INPUT_TEXT --es msg“你好吗!你好!”

这是github项目: https://github.com/senzhk/ADBKeyBoard

希望这个小项目有所帮助。

答案 1 :(得分:7)

其实ADBKeyBoard非常好!谢谢Eric Tang!

一些有用的扩展,以便舒适使用:

从adb切换到ADBKeyBoard:

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

检查可用的le虚拟键盘:

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  

使用adb over wifi来简化你的生活......:)

答案 2 :(得分:3)

input无效,因为它只能通过虚拟键盘发送单键事件(如果您不知道我的意思,请查看源代码)。

我认为剩下的唯一方法就是使用 Instrumentation 。我猜您可以为活动创建一个测试,然后执行以下操作:

                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);

这将发送修改后的密钥:àèìòù

答案 3 :(得分:0)

您应该打开USB模拟输入。 设置路径为:(打开设置->开发人员选项-> USB模拟输入)