了解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冰淇淋三明治或更晚......
答案 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模拟输入)