开发者控制台

步骤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(电视直播)> 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类调用活动的示例:

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创建为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资源是否已定义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,则说明该应用未被正确列入允许列表。程序包名称应该与要列入允许列表的已提交程序包相同。请联系您的亚马逊联系人,以将调试程序包名称和生产程序包名称添加到允许列表。

后续步骤

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


Last updated: 2022年8月12日