有没有办法以编程方式查找安装应用程序的设备是 7 英寸平板电脑还是 10 英寸平板电脑?
最佳答案
您可以使用 DisplayMetrics
获取有关您的应用正在运行的屏幕的大量信息。
首先,我们创建一个DisplayMetrics
指标对象:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
由此,我们可以得到显示尺寸所需的信息:
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;
这将返回以像素为单位的宽度和高度的绝对值,因此 Galaxy SIII、Galaxy Nexus 等为 1280x720。
这本身通常没有帮助,因为当我们在 Android 设备上工作时,我们通常更喜欢在与密度无关的像素中工作,dip。
您再次使用 metrics
以设备比例因子的形式获得屏幕的 密度
,它基于 Android Design Resources对于 mdpi
、hdpi
等。
float scaleFactor = metrics.density;
根据这个结果,我们可以计算出特定高度或宽度下与密度无关的像素数量。
float widthDp = widthPixels / scaleFactor
float heightDp = heightPixels / scaleFactor
您从中获得的结果将帮助您确定您正在使用的屏幕类型以及 Android Configuration examples ,它为您提供每个屏幕尺寸的相对 dp:
- 320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
- 480dp: a tweener tablet like the Streak (480x800 mdpi).
- 600dp: a 7” tablet (600x1024 mdpi).
- 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).
通过以上信息,我们知道如果设备的最小宽度大于 600dp,则该设备为 7"平板电脑,如果大于 720dp,则该设备为 10"平板电脑。
我们可以使用Math
类的min
函数计算出最小宽度,传入heightDp
和widthDp
返回 smallestWidth
。
float smallestWidth = Math.min(widthDp, heightDp);
if (smallestWidth > 720) {
//Device is a 10" tablet
}
else if (smallestWidth > 600) {
//Device is a 7" tablet
}
但是,这并不总是给您一个完全匹配的结果,尤其是在使用不起眼的平板电脑时,这些平板电脑可能会将其密度错误地表示为 hdpi,而实际上它不是,或者可能只有 800 x 480 像素但仍然在7"屏幕。
除了这些方法之外,如果您需要知道设备的确切尺寸(以英寸为单位),您也可以使用 metrics
方法来计算每英寸有多少像素屏幕。
float widthDpi = metrics.xdpi;
float heightDpi = metrics.ydpi;
您可以根据设备每英寸的像素数以及总像素数来计算设备的英寸数。
float widthInches = widthPixels / widthDpi;
float heightInches = heightPixels / heightDpi;
这将返回设备的高度和宽度(以英寸为单位)。这对于确定它是什么类型的设备并不总是那么有帮助,因为设备的广告尺寸是对角线,我们所拥有的只是高度和宽度。
但是,我们也知道,给定三角形的高度和宽度,我们可以使用勾股定理计算出斜边的长度(在这种情况下,是屏幕对角线的大小)。
//a² + b² = c²
//The size of the diagonal in inches is equal to the square root of the height in inches squared plus the width in inches squared.
double diagonalInches = Math.sqrt(
(widthInches * widthInches)
+ (heightInches * heightInches));
由此我们可以判断设备是否是平板电脑:
if (diagonalInches >= 10) {
//Device is a 10" tablet
}
else if (diagonalInches >= 7) {
//Device is a 7" tablet
}
这就是您计算正在使用的设备类型的方式。
关于android - 以编程方式检测 7 英寸和 10 英寸平板电脑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055458/