Используйте следующий метод для определения наличия жесткой клавиатуры в любое время:
(Насколько мне известно, на всех программных клавиатурах отсутствует проверенные ниже функции)
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()'
}