使用 Flutter 创建 Android TV 应用

横幅(banner)

如果应用包含 Leanback 启动器 intent 过滤器,那么它必须针对每种本地化语言提供一张主屏幕横幅图片。横幅是一个像素大小为 320x180 的图片。创建后,将其命名为 banner.png,并将其复制到 android/app/src/main/res/drawable 文件夹。

您可以将 android:banner 属性与 <application> 标记一起使用,为所有应用 Activity 提供默认横幅,也可以将其与 <activity> 标记一起使用,为特定 Activity 提供横幅。

1
2
3
4
<application
    android:banner="@drawable/banner">
   ...
</application>

活动(Activity)

目标平台为 TV 设备的应用必须在其清单中声明 TV 启动器 Activity。它使用 CATEGORY_LEANBACK_LAUNCHER intent 过滤器来执行此操作。此过滤器可将您的应用标识为支持 TV 平台,并让 Google Play 将其识别为 TV 应用。当用户在其 TV 主屏幕上选择您的应用时,此 intent 可确定要启动的 Activity。

如果您的应用没有此过滤器,那么当您使用开发者工具将其加载到 TV 设备上时,该应用不会出现在 TV 界面中。

1
2
3
4
5
6
7
8
9
 <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>

Leanback UI

声明您的应用使用 Android TV 所要求的 Leanback UI。如果您要开发一款在移动设备(手机、穿戴式设备、平板电脑等)以及 Android TV 上都可运行的应用,请将 required 属性值设为 false。如果您将 required 属性值设为 true,您的应用将只能在使用 Leanback 界面的设备上运行。

1
2
3
4
5
<manifest> 
   <uses-feature android:name="android.software.leanback" 
       android:required="false" /> 
   ... 
</manifest>

触摸屏

目标平台为 TV 设备的应用不依赖于触摸屏进行输入。为明确这一点,TV 应用的清单必须声明 android.hardware.touchscreen 功能为非必备功能。此设置会将您的应用标识为能够在 TV 设备上工作,这也是您的应用在 Google Play 中被视为 TV 应用的必要条件。

1
2
3
4
5
<manifest> 
   <uses-feature android:name="android.hardware.touchscreen" 
             android:required="false" /> 
   ... 
</manifest>

相关补充

Intent(意图)是一个消息传递对象,可以用来从其他应用组件请求操作。Intent 通过多种方式促进组件之间的通信,是 Android 通信的桥梁。

  • 资料 A:https://www.runoob.com/w3cnote/android-tutorial-intent-base.html
  • 资料B:https://developer.android.com/training/tv/start/start