gpt4 book ai didi

android - 在 Android 中注入(inject)非英文字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:04 25 4
gpt4 key购买 nike

我正在远程控制应用程序上编程。其中一项任务是注入(inject)字符。我目前使用的代码如下所示:

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 框中)。但是,如果我试图注入(inject)例如韩文字符,这失败了。函数 getEvents 返回 null,即使我配置了韩语和键盘也是如此。

我知道还有另一种直接注入(inject)字符串的方法:

KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);

这也不起作用 - EditText 框中没有显示任何字符,并且在我的测试 Activity 中也没有调用 onKeyMultiple()。

这很奇怪,因为具有相同事件的 dispatchKeyEvent() 在我的测试 Activity 中有效:

KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);

我的远程控制应用程序需要向哪个 Activity 注入(inject)事件。这可以使用 Instrumentation(使用 android.permission.INJECT_EVENTS 和带有平台 key 的签名)。

如何使用工具注入(inject)非英文字符?还有另一种方法可以做到这一点吗?例如。使用 dispatchKeyEvent(也必须适用于其他 Activity/应用程序)。

最佳答案

我将上面的部分留作额外信息。我找到了解决办法。它需要有 root,但如果你可以用应用程序 key 签名,我想这不是问题。您可以做的是编辑文件 Virtual.kcm (/system/usr/keychars/Virtual.kcm),这是默认的键字符映射 (kcm)。您可以添加任何您想要的字符,然后使用 Instrumentation.sendStringSync(String string) 方法,因为它将能够从新的 kcm 生成 KeyEvents。

我在手机上编辑 kcm 时遇到了一些问题,所以我所做的是将其复制到计算机上,在那里进行编辑,然后将其复制回设备。

希望对您有所帮助!


在此link ,出现以下内容。它接缝虚拟键盘有一个美国 keyCharacterMap 和布局,无论您在设置上选择什么。我一直没能找到解决这个问题的方法。

Language Note

Android does not currently support multilingual keyboards. Moreover, the built-in generic key character map assumes a US English keyboard layout.

OEMs are encouraged to provide custom key character maps for their keyboards if they are designed for other languages.

Future versions of Android may provide better support for multilingual keyboards or user-selectable keyboard layouts.

关于android - 在 Android 中注入(inject)非英文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10752936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com