小编kah*_*hlk的帖子

在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);
    }
}
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(也必须适用于其他活动/应用程序).

events android code-injection

7
推荐指数
1
解决办法
1492
查看次数

标签 统计

android ×1

code-injection ×1

events ×1