Отправьте комбинацию клавиш (мета-ключ и код-код) через Android API - PullRequest
6 голосов
/ 12 августа 2011

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

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

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

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

this.sendDownUpKeyEvents(KeyEvent.KEYCODE_CTRL_RIGHT);

Но когда это выполняется на Javascript Key Event Tester (см. Выше), ничего не происходит.

Так что мне нужно понять, как отправлять только мета-ключи и отправить мета-ключи в сочетании с другим ключом.Я также попробовал следующее, чтобы отправить 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) через API Android?

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

1 Ответ

0 голосов
/ 12 мая 2015

Я просто поместил оба модификатора мета-ключа одновременно, и это сработало ...

например KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON.

...