如何在Android中以编程方式确定目标设备?

时间:2011-08-31 00:02:22

标签: android device target galaxy

我想以编程方式确定(在Android平台上)目标设备是手机还是平板电脑。 有没有办法做到这一点? 我尝试使用密度度量来相应地确定分辨率和使用的资源(图像和布局),但结果并不好。当我在手机(Droid X)和平板电脑(三星Galaxy 10.1)上启动应用程序时会有所不同。

请告知。

3 个答案:

答案 0 :(得分:1)

您可以使用此代码

private boolean isTabletDevice() {

if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb
    // test screen size, use reflection because isLayoutSizeAtLeast is only available since 11
    Configuration con = getResources().getConfiguration();
    try {
        Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class);
        Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE
        return r;
    } catch (Exception x) {
        x.printStackTrace();
        return false;
    }
}
return false;
}

链接:http://www.androidsnippets.com/how-to-detect-tablet-device

答案 1 :(得分:0)

正如James已经提到的,您可以通过编程方式确定屏幕大小,并使用阈值数字来区分您的逻辑。

答案 2 :(得分:0)

根据Aracem的回答,我更新了正常平板电脑检查3.2或更高(sw600dp)的片段:

public static boolean isTablet(Context context) {
    try {
        if (android.os.Build.VERSION.SDK_INT >= 13) { // Honeycomb 3.2
            Configuration con = context.getResources().getConfiguration();
            Field fSmallestScreenWidthDp = con.getClass().getDeclaredField("smallestScreenWidthDp");
            return fSmallestScreenWidthDp.getInt(con) >= 600;
        } else if (android.os.Build.VERSION.SDK_INT >= 11) { // Honeycomb 3.0
            Configuration con = context.getResources().getConfiguration();
            Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class);
            Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE
            return r;
        }
    } catch (Exception e) {
    }
    return false;

}