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

如何在Android中以编程方式确定目标设备?,android,device,target,galaxy,Android,Device,Target,Galaxy,我想通过编程确定(在Android平台上),目标设备是手机还是平板电脑。 有办法做到这一点吗? 我尝试使用密度度量来确定分辨率,并相应地使用了资源(图像和布局),但结果并不理想。当我在手机(Droid X)和平板电脑(三星Galaxy 10.1)上启动应用程序时,会有不同之处 请告知。正如James已经提到的,您可以通过编程确定屏幕大小,并使用阈值来区分您的逻辑 您可以使用此代码 private boolean isTabletDevice() { if (android.os.Build.V

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


请告知。

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

您可以使用此代码

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;
}

链接:

根据Aracem的回答,我用3.2或更高版本(sw600dp)的普通平板电脑检查更新了代码片段:


你看到了什么样的差异?看看这一点,你就可以了解显示器尺寸和所需硬件的设计:谢谢你的参考,詹姆斯。差异是渲染中的伪影。与平板电脑相比,在手机上测试时,对象不会呈现在相同的位置。那么问题现在解决了吗?我正在根据屏幕大小和密度添加更多资源,进行一些实验。目前,其中一个模块正在使用替代资源工作。这可能是不正确的,因为ICS现在在平板电脑和手机上都可以工作,并且它的SDK>=11.Vlad,在检查版本是否>=11后,检查布局大小是否为XLARGE
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;

}