开发者控制台

步骤2: 设置TvInputService

步骤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" />

重要详细信息

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(同步来源)下方

使用以下步骤验证您的设置。

  1. 在Fire TV上构建并安装您的APK。
  2. 导航到Settings > Live TV > Sync Sources
  3. 您的输入名称应出现在菜单下方。
  4. 单击菜单中您的名称。

SetupActivity应该启动。

Android Studio连接到设备后应显示的内容

如果从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资源是否已定义SetupActivitySetupActivity是否有效?
尝试过上述所有方法,但仍然无法运行。

在命令提示符下,在日志中搜索ProviderRegistry

ProviderRegistry日志(Linux或Mac):
adb logcat | grep ProviderRegistry
ProviderRegistry日志 (Windows)
adb logcat | findstr ProviderRegistry

在您的Fire TV上,转到Settings > My Account(我的账户)> Sync Amazon 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日