Я новичок в разработке для Android и в настоящее время программирую редактор методов ввода (IME) для операционной системы Google Android (уровень API 11 == версия 3.0).
(следующий код упрощен для указанияпроблема.)
Я могу отправлять символы в базовое приложение с помощью:
@Override
public final void onKey(final int primaryCode, final int[] keyCodes) {
this.getCurrentInputConnection().commitText(String.valueOf((char) primaryCode), 1);
}
Теперь я хочу отправить специальные комбинации клавиш (например, SHIFT + A).Java-код для достижения этой цели следующий (для особого случая SHIFT + A):
@Override
public final void onKey(final int primaryCode, final int[] keyCodes) {
long eventTime = SystemClock.uptimeMillis();
this.sendDownKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT);
KeyEvent keyEvent = new KeyEvent(
eventTime,
eventTime,
KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_A, // ToDo: How to convert primaryCode to the corresponding KeyEvent constant?
KeyEvent.META_SHIFT_ON
);
this.getCurrentInputConnection().sendKeyEvent(keyEvent);
}
public final void sendDownKeyEvent(final int keyEventCode) {
InputConnection ic = this.getCurrentInputConnection();
if (ic != null) {
long eventTime = SystemClock.uptimeMillis();
ic.sendKeyEvent(
new KeyEvent(
eventTime, eventTime,
KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE
)
);
}
}
Комментарий в предыдущем примере кода показывает мою проблему.Чтобы отправить комбинации клавиш через объект KeyEvent , мне необходимо преобразовать переменную primaryCode (которая содержит код Unicode нажатой клавиши) в константу класса KeyEvent .
Удобный метод для этого случая уже существует или я должен написать его сам?В целом: является ли приведенное выше решение для отправки комбинаций клавиш элегантным или существуют лучшие подходы?(Нелегко найти примеры для Android IME в Интернете ...)
Заранее спасибо!