【发布时间】:2011-10-15 21:02:57
【问题描述】:
我正在开发一个通用的 android 应用程序,我需要检查该应用程序是在平板电脑还是手机中运行。有什么方法可以做到吗?
【问题讨论】:
标签: android
我正在开发一个通用的 android 应用程序,我需要检查该应用程序是在平板电脑还是手机中运行。有什么方法可以做到吗?
【问题讨论】:
标签: android
您可以查看Google I/O App for Android src 代码:
在UIUtils 类中,您有以下方法:
public static boolean isHoneycomb() {
// Can use static final constants like HONEYCOMB, declared in later versions
// of the OS since they are inlined at compile time. This is guaranteed behavior.
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
public static boolean isHoneycombTablet(Context context) {
return isHoneycomb() && isTablet(context);
}
【讨论】:
在 sdk 中,您可以创建具有所需属性的设备(屏幕分辨率、内存、触摸屏、gps ....)
【讨论】:
这实际上是一个有趣的问题。 我没有绝对的答案,但您可能会在这里找到一些不错的输入 How to detect system information like os or device type
另外,TelephonyManager.getPhoneType() 和 TelephonyManager 中的其他方法可能也很有趣。
使用 Context.getSystemService(Context.TELEPHONY_SERVICE) 获取 TelephonyManager 的实例。
【讨论】:
来自 Google Jelly Bean 的新实现:
// SystemUI (status bar) layout policy
int shortSizeDp = shortSize
* DisplayMetrics.DENSITY_DEFAULT
/ DisplayMetrics.DENSITY_DEVICE;
if (shortSizeDp < 600) {
// 0-599dp: "phone" UI with a separate status & navigation bar
mHasSystemNavBar = false;
mNavigationBarCanMove = true;
} else if (shortSizeDp < 720) {
// 600-719dp: "phone" UI with modifications for larger screens
mHasSystemNavBar = false;
mNavigationBarCanMove = false;
} else {
// 720dp: "tablet" UI with a single combined status & navigation bar
mHasSystemNavBar = true;
mNavigationBarCanMove = false;
}
}
【讨论】:
shortSize 是什么?