区分App运行在手机还是电视,就是要稳

版权声明:

本公众号发布的所有文章,均属于原创,版权归本公众号所有。

未经允许,不得转载。

一、前言

现在 Android 智能电视出货量已经非常的大了,近两年产的电视,基本上都属于智能电视,而很大一部分都是搭载的 Android 系统。

当然,除了智能电视之外,还有一些智能盒子,例如:小米盒子、天猫魔盒等,其实最终都是 Android 系统。

在国内的环境下,开发的 TV App 其实也并不是遵循的 Google TV 的开发规范,而都是当成一个普通的 Android App 来开发的。在这个过程中,实际上是需要处理一些手机和电视的差异的,例如:焦点、选中状态、屏幕适配等等,这些有时间再细说。

如果,屏幕适配做的好的话,实际上是可以无缝在手机设备上,运行一个原本为了 Android TV 而开发的 App。

而有些场景下,为了节约开发成本,有可能需要对一些在电视上运行的 App 做一个手机端的适配,最常见的场景,一个微信登录的功能,TV App 做的一般是提供一个二维码,让手机扫码登录,但是当这个程序运行在手机端的时候,就可能需要一个按钮,点击调起微信去登录了。

那么,如何在同一个 App 内,区分当前运行在手机设备上,还是电视设备上,就尤为重要了。

二、如何区分

既然要对运行环境做一个区分,那么就需要考虑到,手机和电视的一些差异。

手机和电视的差异性:

  • 屏幕物理尺寸不同。

  • 布局尺寸不同。

  • SIM 卡的支持不同。

  • 电源接入的方式不同。

1、屏幕物理尺寸

手机和电视的屏幕物理尺寸是完全不一样的,但是我们也不能完全使用买电视的时候介绍的 Xx寸 来区分屏幕物理尺寸。实际上完全可以将 Android 电视当成一个大平板。

这里以一个电视英寸数的计算公式,计算屏幕对角线的长度,来做一个参考的数值。

区分App运行在手机还是电视,就是要稳

既然把电视当成一个大平板,这里计算出来的数值,对于电视而言,基本上都是大于 6.5 的,所以以这个条件做判断,是有一定参考价值的。

2、布局尺寸

既然屏幕的尺寸有差异,那么从不同的布局中获取布局文件也是不一样的,可以通过 screenLayout 参数来区分出当前命中那一套。

规则如下:

区分App运行在手机还是电视,就是要稳

截图来自官方文档,有兴趣的可以通篇阅读一下。

https://developer.android.com/guide/practices/screens_support.html?hl=zh-cn

而代码如下:

区分App运行在手机还是电视,就是要稳

3、SIM 支持的模式

对于电视而言,就现在所了解到的,还没有一款智能电视或者智能盒子,是可以插 SIM 卡的,所以判断 SIM 支持的模式,基本上就可以区分出电视还是手机了。

SIM 卡支持的模式可以使用 TelephonyManager 来获取当前的支持模式。

区分App运行在手机还是电视,就是要稳

可以看到 getPhoneType() 可以获取当前设备支持的 Radio 的模式。

区分App运行在手机还是电视,就是要稳

一般而言,判断不出来,就可以认为是一款不支持 SIM 插卡的设备了。

4、电源的接入方式

对于电视的电源,有什么特点?

  1. 永远没有耗电的变动,获取到的电量永远是满的。

  2. 电源接入的方式,使用 AC 交流电,而非 USB 或者电池。

获取当前电源和充电的接入方式,没什么好说的,基本上依据这两个条件,就可以区分出当前到底是电视还是手机/平板了。

区分App运行在手机还是电视,就是要稳

三、设计原则

这里提供的几点方法,其实都是猜测,都是有缺陷的。例如可能出现某些厂商的奇葩设备,出货屏幕尺寸就是大的手机,或者有一些奇葩的电视或者盒子,就是可以支持插 SIM 卡,再或者还有一些智能投影的设备,其实是内带电池的,是有电量的消耗的。

所以最稳妥的方式,就是组合起来判断。

区分App运行在手机还是电视,就是要稳

而这里实际上,这款 App 依然是主要需要发布Android 电视市场的,所以这里的判断,对手机进行严格判断,其他的都认为是 Android TV 。这样即便是误判了,影响也不会太大。

区分App运行在手机还是电视,就是要稳

相关文章:

  • 2021-05-15
  • 2021-12-24
  • 2021-06-25
  • 2021-12-28
  • 2022-12-23
  • 2022-12-23
  • 2022-01-27
  • 2022-01-02
猜你喜欢
  • 2022-12-23
  • 2022-02-08
  • 2022-12-23
  • 2022-02-21
  • 2021-11-22
  • 2021-12-10
  • 2021-11-13
相关资源
相似解决方案