我在远程控制应用程序上编程.其中一项任务是注入角色.我目前使用的代码如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这完全适用于英文字符(字符显示在EditText框中).但是,如果我尝试注入例如韩文字符,则会失败.函数getEvents返回null,即使我配置了韩语和键盘也是如此.
我知道还有另一种直接注入字符串的方法:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);
Run Code Online (Sandbox Code Playgroud)
这也不起作用 - 在EditText框中没有显示任何字符,并且在我的测试活动中也没有调用onKeyMultiple().
这很奇怪,因为具有相同事件的dispatchKeyEvent()在我的测试活动中起作用:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);
Run Code Online (Sandbox Code Playgroud)
我的远程控制应用程序需要注入事件,无论哪个活动.这可以使用Instrumentation(带有android.permission.INJECT_EVENTS
平台密钥和签名).
如何使用仪器注入非英文字符?还有另一种方法来实现这一目标吗?例如,使用dispatchKeyEvent(也必须适用于其他活动/应用程序).