转载请把头部出处连接和尾部二维码一块儿转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52792562css
前言:近年来,智能电视的发展如火如荼,Googel 也在大力推动TV及穿带设备的发展,在互联网的风口,是猪也会飞,这句话并非没有道理的。传统电视机厂商,基本都转型致力于智能电视的相关业务。android
电视硬件是大大不一样于其余Android设备。电视不包括其余Android设备上发现的一些硬件特性,如触屏,摄像头,GPS接收器。电视也彻底依靠辅助硬件设备。为了让用户与电视应用程序交互,他们必须使用一个遥控器或游戏手柄。当你为电视构建一个应用程序,你必须仔细考虑硬件操做电视硬件的限制和要求。web
若是您正在构建一个app运行在TV设备和其余设备,你也许须要去check你的app运行在什么样的设备上且可能将在你的app作何种操做。
例如,若是您有一个app被Intent启动,你的应用应当被检查设备属性去肯定是否能启动在TV下的activity或者是在手机上的activity.微信
推荐一种方法来肯定你的app是否运行在一个TV设备下,
经过使用UiModeManager.getCurrentModeType()方法来检查该设备是否在TV模式下运行。
下面的示例代码显示了如何检查你的应用程序是否运行在一个TV设备:markdown
根据应用程序的设计和功能,你能够解决某些硬件功能不可用。了解什么硬件特性一般不用于电视,如何检测丢失的硬件特性,并建议使用这些特性。app
电视相比其余设备有着不一样的做用,因此它们没有其余android设备一般有的一些硬件特性。出于这个缘由,Android系统不支持电视设备有如下特色:框架
Hardware | Android feature descriptor |
---|---|
Touchscreen | android.hardware.touchscreen |
Touchscreen emulator | android.hardware.faketouch |
Telephony | android.hardware.telephony |
Camera | android.hardware.camera |
Near Field Communications (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
Microphone [1] | android.hardware.microphone |
Sensors | android.hardware.sensor |
Screen in portrait orientation | android.hardware.screen.portrait |
一些电视控制器有一个麦克风,麦克风不同的硬件功能描述。控制器麦克风彻底支持。svg
Android应用程序能够声明硬件功能要求在app中Manifest,以确保他们不被安装在此app下,设备不提供这些功能。若是你是扩展示有应用程序使用在电视上,仔细检查你的应用程序的清单,由于任何硬件requirements声明可能阻止它被安装在一个TV设备上。源码分析
若是您的应用程序使用硬件特性(如触摸屏或相机),不可用在TV上,但能够不使用这些功能,修改你的应用程序的清单,代表这些特性被应用程序不须要。如下清单代码片断演示了如何声明应用程序不须要硬件特性不可用在电视设备,即便没有电视设备上的应用程序可使用这些功能:ui
一些features像android.hardware.camera subfeatures.front,在feature引导时,确保标识required=”false” 在任何子features中,由于也许会使用在app中
全部应用在电视上使用,app必须声明中描述的触摸屏功能不须要使用。若是您的应用程序一般使用上面列出的一个或多个特性,在你的清单文件中,改变这些features像android:required attribute setting为false,
警告:声明一个hardware 的feature可经过设置一些属性值为true,避免你的app能安装在TV 设备或出如今Android TV的launcher启动页上
一旦你决定让你的硬件特性可选应用程序,您必须在运行时检查这些功能的可用性,而后调整你的应用程序的行为。
一些uses-permission清单声明意味着硬件特性。这种行为意味着请求一些应用程序权限清单能够包含你的app从TV设备上安装和使用。下面的通常要求权限建立隐式硬件功能要求:
Permission | Implied hardware feature |
---|---|
RECORD_AUDIO | android.hardware.microphone |
CAMERA | android.hardware.camera and android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION | android.hardware.location android.hardware.location.network (Target API level 20 or lower only.) |
ACCESS_FINE_LOCATION | android.hardware.location android.hardware.location.gps (Target API level 20 or lower only.) |
完整的许可列表请求,意味着硬件功能要求,看到uses-feature指南。若是你的应用程序请求上面列出的特性之一,uses-feature声明包含在您的清单隐含的硬件功能,代表它不是必需的(android:required=“false”)。
注意:若是你的目标app运行Android 5.0(API级别21)或更高版本,并使用ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限,用户仍然能够安装你的应用电视设备,即便电视设备没有网卡或GPS接收器。
Android框架能够告诉你若是没有可用的硬件特性在设备上,应用程序正在运行。使用hasSystemFeature(String)方法在运行时检查特定的功能。该方法接受一个字符串参数,指定您想要的功能检查。
下面的代码示例演示了如何在运行时检测硬件features的可用性:
Touch screen
因大多数电视没有触摸屏,Android不支持触屏交互电视设备。此外,使用一个触摸屏不符合观看环境中用户坐在远离显示10英尺。确保你的UI元素和文本不须要或暗示触摸屏的使用。
电视上的设备,你应该设计你的应用程序使用这个交互模型经过支持导航用定向杆(方向键)在一个电视遥控器。
Camera
虽然电视一般没有相机,你仍然能够提供一个photography-related电视应用。例如,若是您有一个应用程序须要,视图和编辑照片,您能够禁用它的拍照功能电视甚至还容许用户查看和编辑照片。若是你决定让camera-related应用在电视工做,添加如下功能声明应用程序清单:
若是你没有摄像头,使应用程序的运行代码添加到您的应用程序,检测若是相机功能可用,使调整应用程序的操做。下面的代码示例演示了如何检测相机的存在:
GPS
TV是静止的,室内设备,没有内置的全球定位系统(GPS)接收器。若是您的应用程序使用位置信息,您仍然能够容许用户搜索一个位置,或使用一个静态位置提供者如邮政编码在电视设备的配置设置。
Handling Controllers
TV设备须要辅助硬件设备与应用程序进行交互,一个基本形式的远程控制器或游戏控制器。这意味着您的应用程序必须支持方向键输入。这也意味着意味着你的app须要处控制器离线和外置设备(如键盘)输入,而不是一种类型的控制器(普通遥控器)。
方向键最低控制
电视设备的默认控制器是一个方向键。通常来讲,应用程序应该是可操做的,只有从一个远程控制器,下,左,右,选择,和home键。若是你的应用是一种游戏,一般须要与额外的游戏控制器控制,应用程序应该试图让游戏与这些方向键控制。在这种状况下,应用程序也应该提醒用户须要一个控制器和容许他们使用方向键控制器优雅地退出你的游戏。
TV上控制器可能会断开,如蓝牙设备可能会为省电而有周期性的进入睡眠模式或从TV设备上断开。这意味着应用程序可能被中断或重启若是没有配置为处理这些链接事件。这些事件能够发生在有下列情形之一的:
任何TV上的app中activity 是以断开和重链接事件为条件的,必须配置去处理重链接事件在app中Mainfest文件中,下面的代码示例演示了如何启用一个Activity来处理配置的变化,包括键盘或导航设备链接,断开,或从新链接:
第一时间得到博客更新提醒,以及更多android干货,源码分析,欢迎关注个人微信公众号,扫一扫下方二维码或者长按识别二维码,便可关注。