支持Android和AndroidTV的AndroidStudio项目

Ger*_*ard 5 android android-tv

我正在尝试创建一个支持Android(手机/平板电脑)和AndroidTV的AndroidStudio项目.目标是在手机/平板电脑和AndroidTV上具有类似功能,而不需要另一个操作和重用代码.

当我创建一个新项目时,我会:

我试过b)但是手机(5.0)和ADT-1都得到了相同的布局.

下面是我的清单文件(MainActivity放在MainActivityTV之前).当我运行它时,手机和ADT-1都会加载手机布局.但是,当我将MainActivityTV放在MainActivity之前时,我的手机和ADT-1都加载了leanback布局.如何使手机只加载MainActivity,而ADT-1只加载MainActivityTV?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidretrofitwithtv" >

    <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="false" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:banner="@drawable/app_icon_your_company"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".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=".MainActivityTV"
            android:label="@string/app_name"
            android:configChanges="keyboard|keyboardHidden|navigation"
            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>
        <activity android:name=".DetailsActivity" />
        <activity android:name=".PlaybackOverlayActivity" />
        <activity android:name=".BrowseErrorActivity" />
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

poi*_*ick 5

是的,手机/平板电脑和 Android TV 应用程序可以有一个 APK 文件,因为 TV 应用程序使用与手机和平板电脑相同的结构。这种相似性意味着您可以修改现有的应用程序,使其也可以在电视设备上运行,或者根据您已经了解的有关为 Android 构建应用程序的知识来创建新应用程序。

在开始为 TV 构建应用程序之前,您必须: 将您的 SDK 工具更新到 24.0.0 或更高版本。更新后的 SDK 工具使您能够为电视构建和测试应用程序。使用 Android 5.0 (API 21) 或更高版本更新您的 SDK。更新的平台版本为 TV 应用程序提供了新的 API。创建或更新您的应用项目。要访问适用于 TV 设备的新 API,您必须创建一个项目或修改面向 Android 5.0(API 级别 21)或更高版本的现有项目。

  1. 声明电视活动

打算在 TV 设备上运行的应用程序必须使用CATEGORY_LEANBACK_LAUNCHER意图过滤器在其清单中声明 TV 的启动器活动。此过滤器将您的应用识别为已启用 TV,并且是 Google Play 中将您的应用视为 TV 应用所必需的。声明此意图还可以确定当用户在电视主屏幕上选择其图标时要启动应用中的哪个 Activity。

如果您要修改现有应用以在 TV 上使用,您的应用不应使用与手机和平板电脑相同的 TV Activity 布局。您的 TV 应用(或现有应用的 TV 部分)的用户界面应该提供一个更简单的界面,可以使用沙发上的遥控器轻松导航。有关为电视设计应用程序的指南,请参阅电视设计指南。有关 TV 界面布局的最低实现要求的更多信息,请参阅构建 TV 布局。

以下代码片段显示了如何在清单中包含此意图过滤器:

<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>
Run Code Online (Sandbox Code Playgroud)
  1. 声明 Leanback 支持

声明您的应用使用 Android TV 所需的 Leanback 用户界面。如果您正在开发在移动设备(手机、可穿戴设备、平板电脑等)以及 Android TV 上运行的应用程序,请将所需的属性值设置为 false。如果您将 required 属性值设置为 true,您的应用程序将仅在使用 Leanback UI 的设备上运行。

<manifest>
      <uses-feature android:name="android.software.leanback"
            android:required="false" />
       ...
</manifest>
Run Code Online (Sandbox Code Playgroud)
  1. 声明不需要触摸屏

您的 TV 应用的清单必须声明不需要 android.hardware.touchscreen 功能。此设置将您的应用标识为能够在电视设备上运行,并且是您的应用在 Google Play 中被视为电视应用所必需的。以下代码示例显示了如何包含此清单声明:

<manifest>
     <uses-feature android:name="android.hardware.touchscreen"
          android:required="false" />
     ...
</manifest>
Run Code Online (Sandbox Code Playgroud)
  1. 提供主屏幕横幅

如果应用程序包含 Leanback 启动器意图过滤器,则它必须为每个本地化提供一个主屏幕横幅。横幅是显示在主屏幕上的应用程序和游戏行中的应用程序启动点。将清单中的横幅描述如下:

<application
      ...
      android:banner="@drawable/banner" >
      ...
</application>
Run Code Online (Sandbox Code Playgroud)

使用 android:banner 属性和标签为所有应用程序活动提供默认横幅,或使用标签为特定活动提供横幅。

请参阅电视设计指南的 UI 模式中的横幅

  1. 添加电视支持库

Android SDK 包括旨在用于电视应用程序的支持库。这些库提供用于电视设备的 API 和用户界面小部件。这些库位于/extras/android/support/ 目录中。以下是这些库及其一般用途的列表:

  1. v17 Leanback 库- 为电视应用程序提供用户界面小部件,特别是为进行媒体播放的应用程序。
  2. v7 recyclerview 库- 提供用于以内存高效的方式管理长列表显示的类。v17 Leanback 库中的几个类依赖于该库中的类。
  3. v7 cardview library - 提供用于显示信息卡的用户界面小部件,例如媒体项目图片和描述。