我正在尝试创建一个支持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>
答案 0 :(得分:2)
是的,手机/平板电脑和Android TV应用都可以有一个APK文件,因为电视应用使用与手机和平板电脑相同的结构。这种相似性意味着您可以修改现有应用,以便在电视设备上运行,也可以根据您为Android构建应用的相关知识创建新应用。
在开始制作电视应用之前,您必须: 将SDK工具更新到24.0.0或更高版本。更新的SDK工具使您能够构建和测试电视应用程序。 使用Android 5.0(API 21)或更高版本更新SDK。更新的平台版本为TV应用程序提供了新的API。 创建或更新您的应用项目。要访问电视设备的新API,您必须创建项目或修改针对Android 5.0(API级别21)或更高级别的现有项目。
用于在电视设备上运行的应用程序必须使用CATEGORY_LEANBACK_LAUNCHER意图过滤器在其清单中声明电视的启动器活动。此过滤器会将您的应用标识为已启用电视,并且您的应用需要将其视为Google Play中的电视应用。声明此意图还可以识别用户在电视主屏幕上选择其图标时要启动的应用中的哪个活动。
如果您要修改现有应用以在电视上使用,则您的应用不应使用与手机和平板电脑相同的电视活动布局。电视应用程序(或现有应用程序的电视部分)的用户界面应提供更简单的界面,可以使用沙发上的遥控器轻松导航。有关设计电视应用的指南,请参阅TV Design guide。有关电视上界面布局的最低实施要求的更多信息,请参阅Building TV Layouts.
以下代码段显示了如何在清单中包含此intent过滤器:
<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>
声明您的应用使用Android TV所需的Leanback用户界面。如果您正在开发在移动设备(手机,可穿戴设备,平板电脑等)以及Android TV上运行的应用,请将所需的属性值设置为tofalse。如果将required属性值设置为true,则您的应用程序将仅在使用Leanback UI的设备上运行。
<manifest>
<uses-feature android:name="android.software.leanback"
android:required="false" />
...
</manifest>
您的电视应用的清单必须声明不需要android.hardware.touchscreen功能。此设置可将您的应用标识为能够在电视设备上运行,并且您的应用需要将其视为Google Play中的电视应用。以下代码示例显示了如何包含此清单声明:
<manifest>
<uses-feature android:name="android.hardware.touchscreen"
android:required="false" />
...
</manifest>
如果应用程序包含Leanback启动器意图过滤器,则必须为每个本地化提供主屏幕横幅。横幅是应用和游戏行中主屏幕上显示的应用启动点。在清单中描述横幅如下:
<application
...
android:banner="@drawable/banner" >
...
</application>
对标签使用android:banner属性为所有应用程序活动提供默认横幅,或者使用标记为特定活动提供横幅。
请参阅电视设计的UI模式指南中的Banners。
Android SDK包含适用于电视应用的支持库。这些库提供API和用户界面小部件,以便在电视设备上使用。这些库位于/ extras / android / support /目录中。以下是库及其一般用途的列表:
答案 1 :(得分:0)
您可以通过检测正在运行的设备类型来执行此操作。我会在你的MainActivity中通过检查UI模式,然后启动TVActivity,如果它在Tv上运行,如下所示
uiMode = (UiModeManager) getSystemService(UI_MODE_SERVICE)
if(uiMode.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION){
//then start TvActivity here
...
}