0.概述
智能电视近两年可谓发展迅猛,据艾瑞咨询数据显示,2015年国内智能电视终端销售量将达到3556.8万台,预计在2016年用户量突破一亿。不同于手机端群雄割据的局面,Google开发的Android TV系统,凭借其广泛的兼容性,几乎占据了智能电视的全部市场。
简单来看,TV端具有Phone和Pad都不具备的大屏,是移动端的一个大屏扩展。但是,窃以为还不止于此,TV侧的内容,不同于强调私密性的移动侧内容,更加强调多人共享的属性。移动互联网的发展,方便人们生活的同时,也割裂了人与人在现实世界中的交流,我们似乎缺少了一种能在现实生活中互相交流的手段,而用户对TV的使用习惯恰恰可以帮助人们聚在一起。试想一下小时候一家人围坐在电视前吃饭,或者周末酒吧一群狐朋狗友一起看球,这些都是电视才具备的“凝聚力”。而更进一步的Android TV支持种类繁多的输入、输出设备,我们可以做的不仅仅是看电视,这里可深挖、可想象的空间还很大。所以,不少传统的家电厂商,已经将TV端视作未来智能家居、客厅娱乐的核心展示环节,一些主打内容的互联网产品也都抓住风口,相继推出了TV端app。
1.新建一个AndroidTV工程
Android TV工程使用和Android Phone工程相同的文件结构,一样可以使用Android Studio Gradle的方式进行编辑和构建。(这种相似性意味着你可以轻微修改现有的Phone端app以使其可以在TV端运行。)
当我们需要新建一个TV端工程,或者是修改Phone端的app以使其可以在TV端运行时,需要考虑使用以下组件:
- Activity for TV (必须的),在你的AndroidMainifest文件中,声明一个在TV端运行的Activity
- TV Support Libraries(可选的),这个类库为开发人员提供了一些用于TV端的API和UI控件,常用的包括:
- v17 leanback library 一整套google推荐的TV端界面风格
- v7 recyclerview library 一个用于管理长列表的具有回收能力的控件
- v7 cardview library 卡片化风格的UI控件
2.前期准备
在你开始构建你的TV app之前,你需要:
- 更新你的SDK tools到24.0.0或者更高版本
- 更新你的SDK到Android 5.0(API 21) 或者更高版本
3.描述一个TV Activity
在AndroidMainifest在声明一个Activity,这与普通的Phone端的Activity的声明并没有什么不同。下面的例子展示了一个基本的AndroidMainifest:
代码语言:javascript复制<application
android:banner="@drawable/banner" >
... <activity
android:name="com.example.android.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.android.TvActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Leanback">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity></application>
第二个Activity是一个启动Activity,并且它包含CATEGORY_LEANBACK_LAUNCHER
这个intent-filter。(需要注意的一点是,如果你的启动Activity不包含这个属性,在Google Play的TV应用商店是无法上架的。)
4.添加Leanback支持库
Leanback风格现在是Google力推的Android TV端的设计风格,大概也是受够了Phone端千奇百怪的应用风格,希望能在TV端走向统一。Google特意给这个属性增加了一个开关,如果你需要在TV端运行才把这个属性设为true,如下所示:
代码语言:javascript复制<manifest>
<uses-feature android:name="android.software.leanback"
android:required="true" />
...</manifest>
5.输入设备
电视的外接设备相当复杂 ,一个重要的特点是运行在TV端的app不再以“触摸”作为主要的输入手段,可选的输入设备包括遥控器,鼠标,手柄,触摸板以及手机。很难确保你依赖的输入信号是一定存在的,简单的“菜单”键,可能有的遥控器都不支持。而遍历市面上的TV外设后,可能可供选择的操作子集就只剩下“上下左右”和“确定”键了。目前主流的TV应用仍将遥控器作为主要的输入设备,QQ音乐的TV端在开发时也使用遥控器作为主要输入设备,但是也遇到了一些问题:有的遥控器没有“菜单”键导致不能唤起播放列表,大量文本输入非常困难等等。另一种解决方案是将操作逻辑放到手机上,通过WIFI或者红外信号的方式,将操作逻辑投放到TV上,Google推出的chromecast就是一种类似的解决方案。
6.TV的界面风格
根据艾瑞咨询的统计数据,75%的TV在40寸以上,绝大多数用户会选择在两米以外观看电视,这就决定了TV的界面设计风格:卡片化与焦点态。就目前来看,国内、外的TV界面风格并不统一,但基本遵循前面提到的两个基本原则。国外TV端的风格以Google力推的Leanback风格为主:
国内更常见的风格(以小米盒子为例):
7.开发与调试工具的选择
- Android Studio 目前仍然是Android TV端开发的最好工具。
- 盒子(带USB接口) 显示器
电视的体积大,做实体机调试并不方便,而小巧的盒子比较适合做调试用,通过USB连接电脑,其调试方法和手机完全相同。
- Android 平板
针对TV开发的应用,是可以在Phone和Pad上运行的,但是手机屏幕太小,Pad可以更方便的调试
- 更多的输入、输出设备
电视可以外接的IO设备相当多,最好是能包含尽可能多的外接设备,例如带声音输入的遥控器,带触摸板的遥控器,游戏手柄等等。
8.可能遇到的问题
- 内存不够
就目前的TV端市场来看,TV设备往往具有较强的图象性能(包含多个GPU芯片),但是CPU和内存能力偏弱,需要尤其注意OOM的问题。
- 切换到后台,进程没有被杀死
这个要看具体情况,用户的预期是什么,一般TV用户还是习惯单任务操作。
- 连接有线网络的问题
这个问题在Phone上应该没有,但是TV就会存在有线网络的问题,需要留意。相应的,几乎没人在TV上使用2G/3G网络。