如何检测Android设备是否有软件密钥? (hasPermanentMenuKey不是解决方案)

时间:2014-08-02 17:28:20

标签: android

我需要知道我的应用运行的设备是否有导航栏。

hasPermanentMenuKey不是解决方案,因为有一些设备(例如三星S5)没有导航栏,但也没有菜单键。

有什么方法可以获得此信息吗?甚至可能在build.prop中获取qemu.hw.mainkeys值的方法也是一种解决方案......

谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个

public static boolean hasNavBar(Context context)
    {
        Resources res = context.getResources();
        int resourceId = res.getIdentifier(SHOW_NAV_BAR_RES_NAME, "bool", "android");

        if (resourceId != 0)
        {
            String sNavBarOverride = "";
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
            {
                try
                {
                    Class c = Class.forName("android.os.SystemProperties");
                    Method m = c.getDeclaredMethod("get", String.class);
                    m.setAccessible(true);
                    sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys");
                }
                catch (Throwable e)
                {
                    sNavBarOverride = "";
                }
            }
            boolean hasNav = res.getBoolean(resourceId);
            // check override flag (see static block)
            if ("1".equals(sNavBarOverride))            
                hasNav = false;         
            else if ("0".equals(sNavBarOverride))
                hasNav = true;
            return hasNav;
        }
        else
        { // fallback
            return !ViewConfiguration.get(context).hasPermanentMenuKey();
        }
    }