Detect soft navigation bar availability in android device progmatically? Detect soft navigation bar availability in android device progmatically? android android

Detect soft navigation bar availability in android device progmatically?


Following method worked for me and tested in many devices.

public boolean hasNavBar (Resources resources)    {        int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");        return id > 0 && resources.getBoolean(id);    }

Note: Verified this method in real device


As i know you can detect it by

boolean hasSoftKey = ViewConfiguration.get(context).hasPermanentMenuKey();

But it required APIs 14+


If above solution doesn't work for you then try below method

public boolean isNavigationBarAvailable(){        boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);        boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME);        return (!(hasBackKey && hasHomeKey));    }


Its a hack but it works fine. Try it.

public static boolean hasSoftKeys(WindowManager windowManager){  Display d = windowManager.getDefaultDisplay();  DisplayMetrics realDisplayMetrics = new DisplayMetrics();  d.getRealMetrics(realDisplayMetrics);    int realHeight = realDisplayMetrics.heightPixels;  int realWidth = realDisplayMetrics.widthPixels;  DisplayMetrics displayMetrics = new DisplayMetrics();  d.getMetrics(displayMetrics);  int displayHeight = displayMetrics.heightPixels;  int displayWidth = displayMetrics.widthPixels;  return (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0;}