Отправить комбинацию клавиш (мета-ключ и код ключа) через Android API

Я не могу понять, как отправить комбинацию мета-ключа (например, CTRL) и кода клавиши (например, для RETURN) с Android (я использую уровень API 11 = версия 3.0).

В документации класса KeyEvent упоминаются такие константы, как META_CTRL_ON , а также поддерживаются константы ключевого кода (например, KEYCODE_CTRL_LEFT ) для метаключей.

Я использую Тестер ключевых событий Javascript для проверки вывода, генерируемого моим редактором метода ввода (IME). Кстати, моя цель - разработать программную клавиатуру.

Если я правильно понимаю документацию, будет достаточно выполнить следующий код для отправки только клавиши CTRL :

this.sendDownUpKeyEvents(KeyEvent.KEYCODE_CTRL_RIGHT);

Но когда это выполняется против тестера ключевых событий Javascript (см. выше), ничего не происходит.

Поэтому мне нужно понять, как отправлять только мета-ключи и для отправки мета-ключей в сочетании с другим ключом. Я также попробовал следующее, чтобы отправить SHIFT + ENTER (конкретный пример):

private void _sendShiftEnter() {
    this.sendDownKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT);
    final long eventTime = SystemClock.uptimeMillis();
    this.getCurrentInputConnection().sendKeyEvent(
        new KeyEvent(
            eventTime, // The time (in uptimeMillis()) at which this key code originally went down.
            eventTime, // The time (in uptimeMillis()) at which this event happened.
            KeyEvent.ACTION_DOWN, // Action code: either ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE.
            KeyEvent.KEYCODE_ENTER, // The key code.
            0, // A repeat count for down events (> 0 if this is after the initial down) or event count for multiple events.
            KeyEvent.META_SHIFT_ON, // Flags indicating which meta keys are currently pressed.
            0, // The device ID that generated the key event.
            0, // Raw device scan code of the event.
            KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE, // The flags for this key event.
            InputDevice.SOURCE_KEYBOARD // The input source such as SOURCE_KEYBOARD.
        )
    );
}

Здесь также возникает та же проблема, что и выше: единственный распознанный ключ - ENTER.

Я уже несколько часов искал в Интернете примеры, как использовать класс KeyEvent с мета-ключами и / или комбинациями клавиш, но не смог найти хотя бы один пример кода.

Итак, в заключение: есть ли у кого-нибудь опыт работы с KeyEvent и можете продемонстрировать мне, как отправить простую комбинацию клавиш (например, SHIFT + ENTER) через Android API?

Заранее спасибо!

6
задан Florian Wolters 12 August 2011 в 12:17
поделиться