Подтвердить что ты не робот

Как обнаружить присутствие аппаратной клавиатуры?

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

Как я могу вообще запросить возможности устройства?

4b9b3361

Ответ 2

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

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:

android:configChanges="keyboard|keyboardHidden|navigation"

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

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

Ответ 3

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

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