步骤2: 设置TvInputService
步骤2: 设置TvInputService
现在可设置TvInputService
,它代表着您的流媒体源。它还允许您提供家长监护、节目指南信息以及内容评级。请记住,必须先实现本页面上的所有代码,然后才能进行正确地编译和安装。
- 创建最低TvInputService
- 定义输入服务的XML资源文件
- 在清单中声明您的电视输入服务
- 定义SetupActivity
- 检查点 - 您的输入名称显示在Sync Sources(同步来源)下方
- 故障排除
- 后续步骤
创建最低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(电视直播)> 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(同步来源)下方
执行以下步骤,验证您到这一点时是否已正确完成所有操作:
- 在Fire TV上构建并安装您的APK。
- 介绍连接到ADB。
- 如何在ADB上安装和运行您的应用。
- 或者,也可以通过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
是否有效?
我尝试过上述所有方法,但仍然行不通
- 打开终端并在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日