Как определить наличие аппаратной клавиатуры?
Вопрос
Есть ли способ определить, установлена ли аппаратная клавиатура на устройстве, на котором я в данный момент работаю?
В любом случае, как мне запросить возможности устройства?
Решение
"Флаги, предоставляемые 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;
}