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