Android电视应用与手机和平板使用的是同种架构,因此,我们可以让已创建的应用运行在电视设备上,或者基于创建Android应用的知识来创建一个新的应用。

1 创建Tv工程

这节内容我们将学习如何让现有的app运行在电视设备上,或者创建一个新的。首先,我们需要使用以下两个重要的组件:

  • Activity for Tv(必须) - 在应用的manifest文件中,我们需要声明一个需运行在电视端的activity

  • Tv Support Libraries(可选) - 有几个相关的支持包,提供了一些电视设备相关的交互控件。

1.1 必要条件

  • SDK tools版本在24.0.0及以上
  • Android 5.0(API 21)及以上的SDK
  • 创建或更新你的工程 - 为了能够访问为电视设备设计的API,我们需要创建或修改现有的工程目标SDK版本在Andorid 5.0及以上。

1.2 声明Tv Activity

运行在电视设备端的Activity需要使用CATEGORY_LEANBACK_LAUNCHER 意图过滤器声明,这样可以保证Google Play能够认定我们的app为电视版,同时,当我们在电视上选择应用icon时,就会进入此Activity,如下段代码,TvActivity将会展示在电视端,而MainActivity则会显示在手机或平板端。

<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>

注意:如果我们的app中不包含CATEGORY_LEANBACK_LAUNCHER 意图过滤的Activity,那么电视端的Google Play store不会显示我们的应用,同时,我们用开发工具在电视端调试时,我们的应用图标也不会出现在桌面上。

1.3 声明Leanback支持

如果你的应用要同时运行在手机、平板、以及电视设备上,需要将required属性设置为false,如果设置为true那么应用只能运行在使用Leanback UI的设备上。

<manifest>
    <uses-feature android:name="android.software.leanback"
        android:required="false" />
    ...
</manifest>

1.4 声明不可触屏

运行在电视设备上的应用不支持触屏操作,为了明确这一点,我们需要声明不支持android.hardware.touchscreen,此设置能让应用在电视设备上工作,同时为了让Google Play认定app是电视app,此项设置也是必须的。

<manifest>
    <uses-feature android:name="android.hardware.touchscreen"
              android:required="false" />
    ...
</manifest>

注意:如果不进行此设置,我们的应用将不会出现在电视中的Google Play Store中。

1.5 提供主页图标

<application
    ...
    android:banner="@drawable/banner" >

    ...
</application>

1.6 修改加载图颜色

当我们加载一个app的时候,会显示一个圆形图标的加载动画,我们可以自定义其颜色。

通过android:colorPrimary设置特定颜色,另外还要设置两个额外的属性为true,代码如下:

<resources>
    <style ... >
      <item name="android:colorPrimary">@color/primary</item>
      <item name="android:windowAllowReturnTransitionOverlap">true</item>
      <item name="android:windowAllowEnterTransitionOverlap">true</item>
    </style>
</resources>

2 添加Tv支持库

Android SDK下包含了一些用于Tv应用的支持库,这些支持库包含了一些用于Tv应用的UI控件,这些库位于<sdk>/extras/android/support/ 目录下。以下是对这些库的说明:

  • v17 leanback library -提供了一些专门用于媒体播放控件。
  • v7 recyclerview library-提供了以内存效率更高的方式来管理列表展示的类。同时v17 leanback library中的一些类也要依赖此库。
  • v7 cardview library-包含了用来展示信息卡片的控件。

注:这些库不是必须的,如果开发媒体相关的app,我们强烈建议使用。

如果决定要使用v17 leanback library,应当注意,它是依赖v4 support library的,这意味着我们最终要包含如下库:

  • v4 support library
  • v7 recyclerview support library
  • v17 leanback support library

3 创建电视应用教程

以下为创建不同类型的应用相关教程

4 运行电视App

4.1 创建电视虚拟机

1.开启SDK Manager,下载相关镜像。

2.开启AVD Manager,创建虚拟机

点击Create Virtual Device

选择Tv,选择一个设备,然后点击“Next”,直至创建完成。

4.2 在虚拟机上调试

创建好虚拟机之后,我们启动虚拟机,启动后如下图

调试时,我们选择此虚拟机运行就可以了。

4.2.1 关于虚拟机的操作

刚开始,我使用鼠标拖动、点击并没有反应(在应用内还是可以拖动点击的),以为是卡顿或死机了。后来通过摸索得知,为了模拟电视遥控的操作,我们需要通过键盘来控制,键盘中上、下、左、右键,可以移动焦点,点击“确定”键进入,点击“esc”键退出。

评论