通过Android API发送组合键(元键和键码)

时间:2011-08-12 12:18:00

标签: android keyevent android-input-method key-events

我无法弄清楚如何使用Android发送元键(例如CTRL)和键码(例如RETURN)的组合(我使用的是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 类,可以演示如何通过Android API发送简单的密钥组合(例如SHIFT + ENTER)?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我只是同时放置两个元键修饰符,它起作用了......

例如KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON