天天看点

Android TV 笔记

声明一个TV Activity

一个应用想要运行在TV设备中,必须在它的manifest中定义一个启动activity,用intent filter包含​​CATEGORY_LEANBACK_LAUNCHER​​。这个filter表明你的应用是在TV上可用,并且为Google Play上发布TV应用所必须。定义这个intent也意味着点击主屏幕的应用图标时,就是打开的这个activity。

接下来的代码片段显示如何在manifest中包含这个intent filter:

<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 manifest定义的activity是TV设备中的一个启动入口。

Caution:如果在你的应用中不包含​​CATEGORY_LEANBACK_LAUNCHER​​ intent filter,它不会出现在TV设备的Google Play商店中。并且,即使你把不包含此filter的应用用开发工具装载到TV设备中,应用仍然不会出现在TV用户界面上。

如果你正在为TV设备修改现有的应用,就不应该与手机和平板用同样的activity布局。TV的用户界面(或者现有应用的TV部分)应该提供一个更简单的界面,更容易坐在沙发上用遥控器操作。TV应用设计指南,参考​​TV Design​​​指导。查看TV界面布局的最低要求,参考:​​Building TV Layouts​​。

声明Leanback支持

Android TV需要你的应用使用Leanback用户界面。如果你正在开发一个运行在移动设备(手机,可穿戴,平板等等)也包括TV的应用,设置​

​required​

​属性为​

​false​

​。因为如果设置为​

​true​

​,你的应用将仅能运行在用Leanback UI的设备上。

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

声明不需要触屏

运行在TV设备上的应用不依靠触屏去输入。为了清楚表明这一点,TV应用的manifest必须声明​

​android.hardware.touchscreen​

​为不需要。这个设置表明应用能够工作在TV设备上,并且也是Google Play认定你的应用为TV应用的要求。接下来的示例代码展示这个manifest声明:

<manifest>
    <uses-feature android:name="android.hardware.touchscreen"
              android:required="false" />
    ...
</manifest>      
Caution:必须在manifest中声明触屏是不需要的,否则应用不会出现在TV设备的Google Play商店中。

提供一个主屏幕横幅

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

    ...
</application>