开发者控制台

步骤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;
    }
}

定义输入服务的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(电视直播)”→“Sync Sources”→“<输入名称>”后启动

在清单中声明您的电视输入服务

AndroidManifest.xml应用部分中的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类调用Activity的示例:

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
    }
}

应将SetupActivity创建为AndroidManifest XML文件中的类(如下所示)。

创建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>

AndroidManifest中的SetupActivity示例:

<activity android:name=".SetupActivity" >
 <intent-filter>
        <action android:name="android.intent.action.MAIN" />
 </intent-filter>
</activity>

检查点 - 您的输入名称显示在“Sync Sources(同步来源)”下方

执行以下步骤,验证您到这一点时是否已正确完成所有操作:

  1. 在Fire TV上构建并安装您的APK。
  2. 导航到“Settings”>“Live TV”>“Sync Sources”。
  3. 菜单中应显示您的输入名称
  4. 单击菜单中您的名称。
  5. 此时应该会启动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资源是否已定义SetupActivity? SetupActivity是否有效?

尝试过上述所有方法,但仍然无法运行

  • 打开终端并在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,则说明该应用未被正确列入允许列表。程序包名称应该与要列入允许列表的已提交程序包相同。请联系您的亚马逊联系人,以将调试程序包名称和生产程序包名称添加到允许列表。

后续步骤

转到下一步: 步骤3: 插入第一个频道