Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测android设备是否有软件密钥?(hasPermanentMenuKey不是解决方案)_Android - Fatal编程技术网

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

如何检测android设备是否有软件密钥?(hasPermanentMenuKey不是解决方案),android,Android,我需要知道运行我的应用程序的设备是否有导航栏 hasPermanentMenuKey不是一个解决方案,因为有些设备(如三星S5)没有导航栏,但也没有菜单键 有什么方法可以得到这些信息吗?甚至在build.prop中获取qemu.hw.mainkey值的方法都可能是一种解决方案 谢谢大家! 试试这个 public static boolean hasNavBar(Context context) { Resources res = context.getResources(

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

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

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

谢谢大家!

试试这个

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();
        }
    }

“我需要知道运行我的应用程序的设备是否有导航栏”--您试图在需要这些信息的地方解决什么问题?在很多情况下,这些信息都很有用。例如,有时在使用半透明系统栏时,无法使用setFitsSystemWindows()设置当前窗口的填充(例如,在使用对话框或preferenceActivity时会发生这种情况)。这不仅仅是关于布局的问题,您可能希望为具有软件键的设备指定一些不同的行为……”“您不能使用setfitsystemwindows()设置当前窗口的填充”——好的,导航栏的大小没有保证。因此,我仍然不明白知道导航栏是否存在对您有什么帮助。所做的只是告诉您大小为0或大于0。“您可能希望为具有软件密钥的设备分配一些不同的行为”——欢迎您这样做,但我不建议这样做。另外,请记住,
qemu.hw.mainkeys
,基于其名称,似乎与仿真器有关,尽管生产硬件可能有一个等价物。1-这不是一个确定的解决方案,但将底部填充设置为50dp将适合90%的设备。最好什么都不要。。。是的,你说得对:-/谢谢