版权声明:html
本帐号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影全部。android
未经容许,不得转载。微信
如今 Android 智能电视出货量已经很是的大了,近两年产的电视,基本上都属于智能电视,而很大一部分都是搭载的 Android 系统。ide
固然,除了智能电视以外,还有一些智能盒子,例如:小米盒子、天猫魔盒等,其实最终都是 Android 系统。布局
在国内的环境下,开发的 TV App 其实也并非遵循的 Google TV 的开发规范,而都是当成一个普通的 Android App 来开发的。在这个过程当中,其实是须要处理一些手机和电视的差别的,例如:焦点、选中状态、屏幕适配等等,这些有时间再细说。ui
若是,屏幕适配作的好的话,其实是能够无缝在手机设备上,运行一个本来为了 Android TV 而开发的 App。设计
而有些场景下,为了节约开发成本,有可能须要对一些在电视上运行的 App 作一个手机端的适配,最多见的场景,一个微信登陆的功能,TV App 作的通常是提供一个二维码,让手机扫码登陆,可是当这个程序运行在手机端的时候,就可能须要一个按钮,点击调起微信去登陆了。3d
那么,如何在同一个 App 内,区分当前运行在手机设备上,仍是电视设备上,就尤其重要了。code
既然要对运行环境作一个区分,那么就须要考虑到,手机和电视的一些差别。cdn
手机和电视的差别性:
手机和电视的屏幕物理尺寸是彻底不同的,可是咱们也不能彻底使用买电视的时候介绍的 Xx寸 来区分屏幕物理尺寸。实际上彻底能够将 Android 电视当成一个大平板。
这里以一个电视英寸数的计算公式,计算屏幕对角线的长度,来作一个参考的数值。
既然屏幕的尺寸有差别,那么从不一样的布局中获取布局文件也是不同的,能够经过 screenLayout 参数来区分出当前命中那一套。
规则以下:
截图来自官方文档,有兴趣的能够通篇阅读一下。
developer.android.com/guide/pract…
而代码以下:
对于电视而言,就如今所了解到的,尚未一款智能电视或者智能盒子,是能够插 SIM 卡的,因此判断 SIM 支持的模式,基本上就能够区分出电视仍是手机了。
SIM 卡支持的模式可使用 TelephonyManager 来获取当前的状态。
getPhoneType()
能够获取当前设备支持的 Radio 的模式。
对于电视的电源,有什么特色?
获取当前电源和充电的接入方式,没什么好说的,基本上依据这两个条件,就能够区分出当前究竟是电视仍是手机/平板了。
这里提供的几点方法,其实都是猜想,都是有缺陷的。例如可能出现某些厂商的奇葩设备,出货屏幕尺寸就是大的手机,或者有一些奇葩的电视或者盒子,就是能够支持插 SIM 卡,再或者有其实还有一些智能投影的设备,实际上是内带电池的,是有电量的消耗的。
因此最稳妥的方式,就是组合起来判断。