Вставка неанглийских символов в 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);
    }
}

Он отлично работает с английскими символами (символы отображаются в полях 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 (должно работать и для других действий/приложений).

7
задан kahlk 27 November 2012 в 10:41
поделиться