Вопрос

Есть ли способ определить, установлена ли аппаратная клавиатура на устройстве, на котором я в данный момент работаю?

В любом случае, как мне запросить возможности устройства?

Это было полезно?

Решение

"Флаги, предоставляемые getResources().getConfiguration().keyboard, являются хорошим способом проверить, какая клавиатура (если таковая имеется) доступна". [1]

http://d.android.com/reference/android/content/res/Configuration.html#keyboard

Другие советы

Используйте следующий метод, чтобы в любой момент убедиться в наличии жесткой клавиатуры:
(Насколько мне известно, программные клавиатуры все недостаток функции, протестированные ниже )

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;
}

Необязательно ловушка ВСЕ изменения клавиатуры во время выполнения для каждого затронутого действия с помощью Проявление Андроида:

android:configChanges="keyboard|keyboardHidden|navigation"

Но обязательно поддержите вышеупомянутое изменение манифеста (по крайней мере) фиктивным onConfigurationChanged() onConfigurationChanged()

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

Чтобы определить, подключена ли обычная qwerty-клавиатура, используйте это:

private boolean isKeyboardConnected() {
    return getResources().getConfiguration().keyboard == KEYBOARD_QWERTY;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top