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