如何在Android中检测平板设备?

4

我正在尝试将我的智能手机应用程序进行轻微修改后移植到平板电脑上。在Android中是否有API可以检测设备是否为平板电脑?

我可以通过比较屏幕尺寸来实现,但是检测平板电脑的正确方法是什么?

4个回答

18

我认为API中没有特定的标志。

根据GDD 2011示例应用程序,我将使用以下辅助方法:

public static boolean isHoneycomb() {
    // Can use static final constants like HONEYCOMB, declared in later versions
    // of the OS since they are inlined at compile time. This is guaranteed behavior.
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}

public static boolean isTablet(Context context) {
    return (context.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

public static boolean isHoneycombTablet(Context context) {
    return isHoneycomb() && isTablet(context);
}

源代码


谢谢Sam,我一定会尝试的。 - Shafi
Configuration.SCREENLAYOUT_SIZE_LARGE 定义了至少具有 480x640 dp 的屏幕,而 XLARGE 则至少具有 720x960 dp。Galaxy Nexus 智能手机的分辨率为 1280x720 - 并且它不是平板电脑。是否有任何简单的方法来解决屏幕尺寸(例如 7 英寸或 10.1 英寸)与屏幕宽度和高度的关系? - user640688
DP 不等于屏幕分辨率。Galaxy Nexus 在纵向模式下的最小宽度为 360dp。请阅读:http://developer.android.com/guide/practices/screens_support.html。 - roflharrison

1

考虑到“新”的接受目录(例如values-sw600dp),我基于屏幕宽度DP创建了这个方法:

/**
 * Returns true if the current device is a smartphone or a "tabletphone"
 * like Samsung Galaxy Note or false if not.
 * A Smartphone is "a device with less than TABLET_MIN_DP_WEIGHT" dpi
 * 
 * @return true if the current device is a smartphone or false in other 
 * case
 */
protected static boolean isSmartphone(Activity act){
    DisplayMetrics metrics = new DisplayMetrics();
    act.getWindowManager().getDefaultDisplay().getMetrics(metrics);

    int dpi = 0;
    if (metrics.widthPixels < metrics.heightPixels){
        dpi = (int) (metrics.widthPixels / metrics.density);
    }
    else{
        dpi = (int) (metrics.heightPixels / metrics.density);
    }

    if (dpi < TABLET_MIN_DP_WEIGHT)         return true;
    else                                    return false;
}



 public static final int TABLET_MIN_DP_WEIGHT = 450;  

以下是一些流行设备和平板电脑尺寸的DP列表:

Wdp / Hdp

GALAXY Nexus: 360 / 567
XOOM: 1280 / 752
GALAXY NOTE: 400 / 615
NEXUS 7: 961 / 528
GALAXY TAB (>7 && <10): 1280 / 752
GALAXY S3: 360 / 615

Wdp = 宽度dp
Hdp = 高度dp


1
由于我不确定这是否有效,我只能建议您为方法选择更好的措辞。一个名为:isSmartphoneOrTablet的方法,其返回值为布尔类型,应该仅在Google TV或类似设备上返回false。 - Christoph

1
我会在应用程序设置中引入“平板电脑模式”,如果分辨率(使用总像素阈值)建议,则默认启用。
据我所知,Android 3.0引入了真正的平板电脑支持,所有先前版本都是针对手机设计的,而平板电脑只是更大的手机 - 我有一个 ;)

什么是平板模式?它如何区分Kindle Fire和Samsung Galaxy Note? - IgorGanapolsky

0

将此方法放置在onResume()中并进行检查。

public double tabletSize() {

     double size = 0;
        try {

            // Compute screen size

            DisplayMetrics dm = context.getResources().getDisplayMetrics();

            float screenWidth  = dm.widthPixels / dm.xdpi;

            float screenHeight = dm.heightPixels / dm.ydpi;

            size = Math.sqrt(Math.pow(screenWidth, 2) +

                                 Math.pow(screenHeight, 2));

        } catch(Throwable t) {

        }

        return size;

    }

一般来说,平板电脑的尺寸从6英寸以上开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接