Is there a way to detect if the device I\'m currently running on has a hardware keyboard installed?
How do I query device capabilities anyway?
"The flags provided by getResources().getConfiguration().keyboard are a good way of checking which keyboard (if any) is available." [1]
http://d.android.com/reference/android/content/res/Configuration.html#keyboard
To detect common qwerty keyboard connected use this:
private boolean isKeyboardConnected() {
return getResources().getConfiguration().keyboard == KEYBOARD_QWERTY;
}
Use the following method to ascertain presence of hard keyboard at any time:
(To my knowledge, soft keyboards all lack the features tested below )
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;
}
Optionally trap all run-time keyboard changes for each affected Activity via AndroidManifest:
android:configChanges="keyboard|keyboardHidden|navigation"
But be sure to support the above manifest change with (at least) a dummy onConfigurationChanged()
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Optionally employ 'isHardKB()'
}