0

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

请指教。

4

3 回答 3

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

于 2012-02-15T10:30:33.163 回答
0

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

于 2011-08-31T01:36:43.160 回答
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;

}
于 2012-10-11T16:51:56.680 回答