Я программирую приложение для удаленного управления. Одна из задач — вставка персонажей. Код, который я сейчас использую, выглядит так:
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);
Мое приложение удаленного управления должно вводить события независимо от того, в какую активность. Это возможно с помощью инструментария (с android.permission.INJECT_EVENTS
и подписью с ключом платформы).
Как я могу вставлять неанглийские символы с помощью инструментария? Есть ли другой способ сделать это? Например. Использование dispatchKeyEvent (должно работать и для других действий/приложений).