Clu*_*ter 5 java keyboard android
我正在开发基于InputMethodServiceAndroid的课程。我的目标是支持硬件键盘,使其能够重新映射一些按钮,并使用不同的charmaps输入文本。
我可以重写onKeyDown方法,以便它将替换键的扫描代码:
public class Keyboard extends InputMethodService {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
InputConnection ic = getCurrentInputConnection();
event = new KeyEvent(event.getDownTime(), event.getEventTime(),
event.getAction(), SOME_NEW_KEY_CODE, event
.getRepeatCount(), event.getMetaState(), event.getDeviceId(),
SOME_NEW_SCAN_CODE, event.getFlags());
ic.sendKeyEvent(event);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我无法输入任何Unicode字符。我可以使用commitText以下方式模拟文本输入:
public class Keyboard extends InputMethodService {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
InputConnection ic = getCurrentInputConnection();
ic.commitText("some text", 1);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
但是它仅适用于带有文本字段的应用程序。例如Microsoft Remote Desktop之类的应用程序无法正确接收文本输入。奇怪的是,它可以接收英文字符,但不能接收西里尔字母,而屏幕键盘可以输入任何Unicode字符。
那么,哪种方法在Android中模拟文本输入最正确?