如何检测硬件键盘是否存在?

35

有没有一种方法可以检测我当前运行的设备是否安装了硬件键盘?

我怎样查询设备功能呢?

3个回答

40

21
基本上这意味着:private boolean isHardwareKeyboardAvailable() { return getResources().getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS; } - Marcus
4
是的,如果您认为“12键键盘”是“硬件键盘”,那么它就是。 - HostileFork says dont trust SE
4
请注意,它将检测到作为设备固有部分的键盘,但不会检测当前是否连接了USB或蓝牙键盘。请参阅https://dev59.com/emfWa4cB1Zd3GeqPkcld。 - GSerg

4
使用以下方法随时确定硬键盘是否存在:
(据我所知,软键盘都缺乏下面测试的功能)
public static boolean isHardKB(Context ctx) {
    Configuration cf = ctx.getResources().getConfiguration();
    return cf.navigation==Configuration.NAVIGATION_DPAD
        || cf.navigation==Configuration.NAVIGATION_TRACKBALL
        || cf.navigation==Configuration.NAVIGATION_WHEEL;
}

可以通过 AndroidManifest 可选捕获每个受影响的 Activity 的所有运行时键盘更改:

android:configChanges="keyboard|keyboardHidden|navigation"

但请确保使用(至少)一个虚拟的onConfigurationChanged()方法来支持上述清单文件更改。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Optionally employ 'isHardKB()'   
}

我所看到的cf.navigation与物理键盘无关,而是与虚拟键盘有关。当我尝试使用带有键盘的物理BT键盘时,这是键盘驱动程序的错误吗?(HAXM模拟器显示没有键盘,但键盘输入有效吗?)到目前为止,我只能看到HostileForks答案中提到的Config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO可以检测到是否存在HW键盘。 - Jan Bergström

4

要检测连接的常见QWERTY键盘,请使用以下方法:

private boolean isKeyboardConnected() {
    return getResources().getConfiguration().keyboard == KEYBOARD_QWERTY;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接