关注我的知乎账号:
https://zhuanlan.zhihu.com/p/34189032
先来一下吐槽:前段时间才开始接触TV项目,年前项目编码结束,还进行了一轮简单的测试,还有一段时间就上线了,具体什么项目不方便透露,有保密协议,体制内的都懂,反正做的时候比较坑。
本文代码量少,不想看的或者刚刚进门的阔以忽略。
下面开始正文,电视和手机开发的不同点:
1.Style样式,AndroidManifest.xml中配置疑问:
a. Style样式可以和手机开发时候配置的一样,譬如我们使用AppCompat-V7包的theme:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:colorPrimary">@color/colorPrimiary</item>
<item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:windowBackground">@drawable/iv_application_bg</item>
</style>
如果我们通过AndroidStudio创建一个TV工程,会自动给我们生成一个demo的项目,然而我们并不太需要这样的代码。
这个自动生成的demo是基于海外的规范的,创建完项目,在values/style.xml中:
<style name="AppTheme" parent="@style/Theme.Leanback"></style>
但是我们基本上也不需要这样的,我个人感觉这个样式都是狗屎鸡肋,国内产品经理和UI设计过的高保真,这个样式规范就是狗屎啊。
我直接还是用写手机项目那一套样式。
b.AndroidManifest.xml
我们同样关注清单文件中和手机有多少不太一样的地方:
最少需要如下几个配置:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.software.leanback"
android:required="true" />
不要和我说你们做电视项目的时候,不需要RECORD_AUDIO这个权限,没有语音吗?🙄
下面看看<application></application>节点下面配置
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.Leanback">
<activity
android:name=".MainActivity"
android:banner="@drawable/app_icon_your_company"
android:icon="@drawable/app_icon_your_company"
android:label="@string/app_name"
android:logo="@drawable/app_icon_your_company"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
</application>
注意:
如果你的机顶盒有桌面,形如:TV模拟器那种的桌面,如mibox这类的机顶盒,都有桌面,或者有点机顶盒应用管理界面都能看到安装的app,第三方的app,用户可以卸载,如果你不想app被看到,被卸载,那么mainActivity的intentFilter可以这样配置:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
image
当然啦,这个也是按照你们的产品需求来定的,我司这个是机顶盒启动之后,白盒app拉起来之后,第三方中间件登录成功之后,自动拉起来我们的app,我们这样配置,
在"设置->应用管理->应用列表"
看不到我们的app在列表中,😈😅
当然这样配置manifest中会有红色警告,可以忽略。
2.焦点问题:
手机开发的时候,很少对焦点这个事做很复杂的处理或者说基本上一般的app不用对焦点这个事情困惑,然而电视开发的时候,全部都得靠焦点,来让控件选中可点击。
3.适配问题:
同样的手机适配和电视适配又有点不一样,这个适配问题,后面我会单独写一篇文章来阐述电视适配问题。
4.视频播放器问题:
手机和机顶盒也不太一样,对于huawei的直播流我也是醉了,无力吐槽,最开始的时候选择Google ExoPlay进行扩展播放器,然后huawei直播流无声音,线上环境的视频发出去了,后台不改,时间短,没有更多精力读里面代码,扩展解码器,只能换播放器,Github上有不少开源播放器,建议选择start高的,提问题活跃以及更新速度快的。
ijkplay,exo这两个还是不错的,依据所在公司的要求,选择。我司的要求下,只能选择SDK内置的MediaPlay。bilibili不像Google,为了避免侵权,Exo在我做的项目直播的时候,没有声音,最后还是换成了MediaPlay。
总之比较坑的是机顶盒,在开发工程中,测试环境和生产环境切换时,升级盒子,一系列步骤,后面视频播放居然播放不了,最后定位出来问题,STB连接工具,xxx地址配置有误。
尤其是mediaPlay这个比较坑啊,报错你懂得,framework级别的,报错都无法定位,含着泪也得写完。
开篇前言写完了!
请各位等待第二篇....................
image.png
网友评论