Android TV开发之旅 一 上手篇

关注我的知乎账号:
https://zhuanlan.zhihu.com/p/34189032

image.png

先来一下吐槽:前段时间才开始接触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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,335评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,205评论 4 61
  • 1、beforeInsert - 在对象初始持久保存到数据库之前执行。如果返回false,插入将被取消。after...
    奇乞祈兴阅读 4,750评论 0 0
  • 願意:1願望我業績快速達到600萬! 2願望有幸福戀愛!3願望得到新大客戶讓我財富豐盛!感恩:1感恩得到充分休息!...
    謝奕鋒阅读 1,033评论 0 0
  • “我喜欢穿粉红色衬衫的男子。”有一天我突然宣布。 “哦,我喜欢灰色。”他淡淡地说。 “灰色多沉闷,多单调啊!像阴雨...
    小小少女阅读 2,823评论 0 1