步骤2: 设置TvInputService
现在可设置TvInputService
了,它代表着您的流媒体源。借助电视输入服务,您可以提供家长监护、节目指南信息以及内容评级。请记住,必须先实现此页面上的所有代码,然后才能正确编译和安装应用。
创建最低TvInputService
创建可扩展TvInputService
的Android Service类。
以下是最低TvInputService
实现示例。
package com.example.android.sampletvinput; // 替换为您的程序包
import android.media.tv.TvInputService;
public class RichTvInputService extends TvInputService {
@Override
public Session onCreateSession(String inputId) {
return null;
}
}
package com.example.android.sampletvinput //替换为您的程序包
import android.media.tv.TvInputService
class RichTvInputService : TvInputService() {
override fun onCreateSession(inputId: String): Session? {
return null
}
}
定义输入服务的XML资源文件
每个输入服务都必须具有一个定义常用输入属性的XML资源文件。以下是此类文件的示例,位于res/xml/richtvinputservice.xml
:
<?xml version="1.0" encoding="utf-8"?>
<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
android:canRecord="true"
android:setupActivity="com.example.android.sampletvinput.SetupActivity" />
com.example.android.sampletvinput
。重要详细信息
Activity | 是否必需? | 注释 |
---|---|---|
android:setupActivity |
是 | 此项将在用户导航至Settings(设置)> Live TV(直播TV)> Sync Sources > <输入名称> 后启动 |
在清单中声明您的电视输入服务
以下是AndroidManifest.xml的application
部分中TvInputService
的示例。
<service
android:name=".RichTvInputService"
android:label="My Input Name"
android:permission="android.permission.BIND_TV_INPUT">
<!--系统启动我们的账户服务所需的筛选条件。-->
<intent-filter>
<action android:name="android.media.tv.TvInputService" />
</intent-filter>
<!--
用来描述此输入的XML文件。它提供指向
系统/TV应用的SetupActivity的指针。
-->
<meta-data
android:name="android.media.tv.input"
android:resource="@xml/richtvinputservice" />
</service>
重要详细信息
Activity | 是否必需? | 输入 | 注释 |
---|---|---|---|
android:label |
是 | My Input Name | 在此处输入您自己的服务名称 |
android:permission |
是 | "android.permission.BIND_TV_INPUT" | 提供Android权限以允许该服务将电视输入连接到系统。 |
<intent-filter> | 是 | <action> | 系统用来启动该服务的筛选条件。 |
android:name |
是 | "android.media.tv.input" | 必须是正确的名称,这样Android才能正确识别该服务。资源必须指向以下定义的结构化XML文件。 |
定义SetupActivity
要向应用添加逻辑,必须添加SetupActivity
类(您可以选择该类的名称)。以下是调用活动的SetupActivity
类的示例。
import android.app.Activity;
import android.os.Bundle;
public class SetupActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rich_setup); // 创建rich_setup.xml
}
}
import android.app.Activity
import android.os.Bundle
import com.example.android.sampletvinput.R
class SetupActivity : Activity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.rich_setup) //创建rich_setup.xml
}
}
将SetupActivity
创建为一个类,并将活动添加到Android清单XML文件中,如以下代码所示。
<activity android:name=".SetupActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
创建rich_setup XML文件并在此定义您的布局。以下是布局文件夹中的rich_setup.xml示例。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
检查点: 您的输入名称显示在Sync Sources(同步来源)下方
使用以下步骤验证您的设置。
- 在Fire TV上构建并安装您的APK。
- 通过ADB连接到Fire TV。
- 安装和运行您的应用。
- 或者,您可以使用Android Studio来安装和运行您的应用。
- 导航到Settings > Live TV > Sync Sources。
- 您的输入名称应出现在菜单下方。
- 单击菜单中您的名称。
SetupActivity
应该启动。

如果从Android Studio进行运行和安装,Devices(设备)部分应显示一个适用于Fire TV的选项。
故障排除
此部分包含解决您可能遇到的问题的步骤。
- 应用程序没有显示在Sync Sources中。
-
使用以下命令获取设备日志。
获取设备日志(Linux或Mac):adb logcat | grep "LiveTvSettings\|TIFUtils"
获取设备日志 (Windows)adb logcat | findstr "LiveTvSettings/|TIFUtils"
如果您看到和以下类似的消息:
TIFUtils: <your application> is not a configurable input.Removing from input list LiveTvSettings: TvInput(s) found: .... <which doesn't include your application>
TvInputService
的定义可能不正确。要解决此问题,请验证以下方面:
- Fire TV设备是否已更新至最新的软件版本?
- 导航到Settings > My Fire TV(我的Fire TV)> About(关于)> Check for Updates(检查更新)。选择此选项并在需要时进行更新。
- InputService是否具有正确的权限?
- InputService是否具有正确的intent-filter?
- InputService是否已定义正确的meta-data?
- InputService的meta-data是否与正确的XML资源关联?
- XML资源是否已定义
SetupActivity
?SetupActivity
是否有效?
- Fire TV设备是否已更新至最新的软件版本?
- 尝试过上述所有方法,但仍然无法运行。
-
在命令提示符下,在日志中搜索
ProviderRegistry
。ProviderRegistry日志(Linux或Mac):adb logcat | grep ProviderRegistry
ProviderRegistry日志 (Windows)adb logcat | findstr ProviderRegistry
在您的Fire TV上,转到Settings > My Account(我的账户)> Sync HAQM Content(同步亚马逊内容)。几秒钟后,您应该看到与下面所示类似的日志。
08-06 17:09:05.684 694 757 I ProviderRegistry: No change for InstalledProvider(configuration=ProviderConfiguration(packageName=com.example.android.sampletvinput, logoId=1254252374292, rowId=null, defaultRank=1, defaultSortOrder=NONE, showBroadcastRatingsFlag=false, tvInputsSupported=false, qualifierId=, supportedContent=[LINEAR], eventRowId=null, featureBlacklist=[], userProviderPreference=UserProviderPreference(mProviderId=, mRank=2147483647, mSortOrder=NONE), stationCount=4)
如果应用名称没有在日志中显示为InstalledProvider,则说明该应用未被正确列入允许列表。程序包名称应该与要列入允许列表的已提交程序包相符。要将调试程序包名称和生产程序包名称添加到允许列表,请联系您的亚马逊代表。
Last updated: 2025年2月6日