我想以编程方式确定(在 Android 平台上)目标设备是手机还是平板电脑。有没有办法做到这一点?我尝试使用密度度量来确定分辨率并相应地使用资源(图像和布局),但结果并不好。在手机 (Droid X) 和平板电脑 (Samsung Galaxy 10.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
正如 James 已经提到的,您可以通过编程方式确定屏幕大小并使用阈值 Number 来区分您的逻辑。
根据 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;
}