美文网首页
Android TV开发之旅 一 上手篇

Android TV开发之旅 一 上手篇

作者: 蒙娜lisa | 来源:发表于2018-03-03 14:23 被阅读67次

    关注我的知乎账号:
    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 TV开发之旅 一 上手篇

          本文链接:https://www.haomeiwen.com/subject/pgvtfftx.html