如何判断一个Android设备是否有硬键

ser*_*kye 10 android

如何判断Android设备是否有物理键或软件导航栏?我需要根据是否绘制软件导航来更改布局.

例如,HTC Desire C有硬件密钥: 在此输入图像描述

我应该澄清 - 我看着导航栏,而不是键盘.家,背等我试过:

        getResources().getConfiguration().keyboard);
        getResources().getConfiguration().navigation);
        getResources().getConfiguration().navigationHidden);
Run Code Online (Sandbox Code Playgroud)

在两个设备上返回相同的值.

ser*_*kye 49

第一次启动应用程序并保存到首选项时解决此问题:

public static boolean hasSoftKeys(WindowManager windowManager){
    boolean hasSoftwareKeys = true;
    //c = context; use getContext(); in fragments, and in activities you can 
    //directly access the windowManager();

    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN_MR1){
        Display d = c.getWindowManager().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;

        hasSoftwareKeys =  (realWidth - displayWidth) > 0 ||
                           (realHeight - displayHeight) > 0;
    } else {
        boolean hasMenuKey = ViewConfiguration.get(c).hasPermanentMenuKey();
        boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
        hasSoftwareKeys = !hasMenuKey && !hasBackKey;
    }
    return hasSoftwareKeys;
}
Run Code Online (Sandbox Code Playgroud)

  • 我现在也在设备> = API 17上使用这种技术.不要太挑剔,但你的return语句可能更具可读性:`return(realWidth> displayWidth)|| (realHeight> displayHeight)` (3认同)

Syn*_*ero 0

private boolean isHardwareKeyboardAvailable() { return getResources().getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS; }

此外,这里还有更多信息。http://developer.android.com/reference/android/content/res/Configuration.html#keyboard

编辑 - 检查物理键盘

private boolean isPhysicalKeyboardAvailable() { return getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY; }

有关不同配置的更多信息,请查看 http://developer.android.com/reference/android/content/res/Configuration.html#keyboard

我确信其中之一是有效的。

第二次编辑-

查看。已经问过了。

Android:以编程方式检测设备是否有硬件菜单按钮

  • 看到帖子,我说我对菜单按钮不感兴趣,带有硬按钮的现代设备没有菜单按钮 (2认同)