我正在编写一个远程控制应用程序。其中一项任务是注入字符。我目前使用的代码如下所示:在Android中注入非英文字符
Instrumentation instr = new Instrumentation();
String str="a";
// basically the same like calling instr.sendStringSync(str);
char[] chars = str.toCharArray();
KeyCharacterMap keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
KeyEvent[] keyEvents = keyCharacterMap.getEvents(chars);
if (keyEvents != null) {
for (KeyEvent kev : keyEvents) {
instr.sendKeySync(kev);
}
}
对英文字符(字符显示在EditText框中)完美起作用。但是,如果我尝试注入例如韩文字符,这失败了。即使我配置了韩语和键盘,getEvents函数也会返回null。
我知道有直接注入串的另一种方法:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);
这不是工作要么 - 没有在EditText上框中显示的字符,onKeyMultiple()不叫无论是在我的测试活动。
这是奇怪的,因为dispatchKeyEvent()使用相同的事件工作在我的测试活动:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);
我的遥控器的应用程序需要注入事件,无论哪个活动。这可以使用Instrumentation(使用android.permission.INJECT_EVENTS
和带有平台密钥的签名)。
如何使用仪器注入非英文字符? 有没有另外一种方法来完成这个?例如。使用dispatchKeyEvent(也必须适用于其他活动/应用程序)。
我现在有同样的问题。任何想法的人?假设'm_KeyCharacterMap'实际上是'keyCharacterMap'? – Sprigg
? –
你是对的。我更正了代码。 – kahlk