Как определить наличие аппаратной клавиатуры? - PullRequest
26 голосов
/ 10 марта 2010

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

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

Ответы [ 2 ]

34 голосов
/ 10 марта 2010

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

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

0 голосов
/ 14 сентября 2018

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

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()'   
}
...