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

版权声明:html

本帐号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影全部。android

未经容许,不得转载。微信

1、前言

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

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

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

若是,屏幕适配作的好的话,其实是能够无缝在手机设备上,运行一个本来为了 Android TV 而开发的 App。设计

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

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

2、如何区分

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

手机和电视的差别性:

  • 屏幕物理尺寸不一样。
  • 布局尺寸不一样。
  • SIM 卡的状态不一样。
  • 电源接入的方式不一样。

一、屏幕物理尺寸

手机和电视的屏幕物理尺寸是彻底不同的,可是咱们也不能彻底使用买电视的时候介绍的 Xx寸 来区分屏幕物理尺寸。实际上彻底能够将 Android 电视当成一个大平板。

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


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

二、布局尺寸

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

规则以下:

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

developer.android.com/guide/pract…

而代码以下:

三、SIM 支持的模式

对于电视而言,就如今所了解到的,尚未一款智能电视或者智能盒子,是能够插 SIM 卡的,因此判断 SIM 支持的模式,基本上就能够区分出电视仍是手机了。

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


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


通常而言,判断不出来,就能够人为是一款不支持 SIM 插卡的设备了。

四、电源的接入方式

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

  1. 永远没有耗电的变更,获取到的电量永远是满的。
  2. 电源接入的方式,使用 AC 交流电,而非 USB 或者电池。

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

3、设计原则

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

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


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

公众号二维码.jpg
相关文章
相关标签/搜索