我正在远程控制应用程序上编程。其中一项任务是注入角色。我目前使用的代码如下所示:
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 (也必须适用于其他活动/应用程序)。