确定设备是否为平板电脑的最佳方法是什么



我需要编写一个方法来确定设备是平板电脑还是手机。我不需要根据这一点显示不同的用户界面。我只需要有关设备的信息,这样将来我就可以将其发送到度量。

在互联网上,我找到了很多方法来确定这个设备是否是平板电脑。我测试了所有这些方法,它们都有效。当然,我不能在各种设备上进行测试。所以我想知道哪种方法是确定设备是否是平板电脑的最佳和最准确的方法。

这是我能找到的方法列表:

1( 使用最小宽度限定符

res/values-sw600dp/attrs.xml:中

<resources>
<bool name="isTablet">true</bool>
</resources>

res/values/attrs.xml

<resources>
<bool name="isTablet">false</bool>
</resources>

以及:

fun isTablet() = context.resources.getBoolean(R.bool.isTablet)

我对这种方式感到担忧。可能值得添加一个资源res/values-sw720dp/attrs.xml,其中包含:

<resources>
<bool name="isTablet">true</bool>
</resources>

2(使用TelephonyManager

fun isTablet(context: Context) =
with(context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager) {
this.phoneType == TelephonyManager.PHONE_TYPE_NONE
}

3(使用Configuration:

fun isTablet(context: Context): Boolean {
return ((context.resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE)
}

4(使用DisplayMetrics:

fun isTablet(activity: Activity): Boolean {
val metrics = DisplayMetrics()
activity.windowManager.defaultDisplay.getMetrics(metrics)
val yInches = metrics.heightPixels / metrics.ydpi
val xInches = metrics.widthPixels / metrics.xdpi
val diagonalInches = sqrt((xInches * xInches + yInches * yInches).toDouble())
return diagonalInches >= 6.5
}

请帮我找到一种100%有效的最佳方法。

在大多数情况下,这些都是完全不同的事情。

方法1是检查设备屏幕最小边的长度。基本上,它是说平板电脑的最小尺寸超过4英寸(在任何正常屏幕分辨率下,对角线至少为1英寸(。

方法2是说平板电脑就是任何没有能力打电话的东西。

方法3是检查其dp是否至少为480x640,或至少为3英寸乘4英寸。(可以小到5英寸的对角线(。

方法4是精确测量对角线。这消除了方法1中的一些理论问题,但它做了很多毫无意义的数学运算(而且这个实现没有优化(。

所有这些都取决于你对平板电脑的定义。没有实际的定义。方法1、3和4基于大小。方法2基于这样一种想法,即如果它有能力打电话,你会称它为手机而不是平板电脑。

假设你想要一个基于尺寸的解决方案,我会选择1。它比方法3更准确、更可扩展(无法区分小平板电脑和大平板电脑(,也比方法4更快(在现实世界中,有些东西可以通过方法1,但方法4捕捉到它们的情况真的不会发生(。

相关内容

最新更新