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