观看实况电视节目和其他连续的基于频道的内容是电视体验的重要组成部分。 用户习惯于通过频道浏览在电视上选择和观看节目。 电视输入框架在电视节目指南中创建发布视频或音乐内容的频道。
注意:电视输入框架旨在供OEM厂商用于为Android系统TV应用程序构建频道。 仅在Android 7.1(API级别25)中才支持Android 5.0(API级别21)。 第三方应用应使用Android TV主屏幕API为其内容构建频道。 详情请参阅推荐电视内容 。
电视输入框架提供了一种统一的方法,用于接收和播放来自硬件源(如HDMI端口和内置调谐器)以及软件源(如通过互联网传输的视频)的实况视频内容。
该框架使开发人员能够通过实施电视输入服务来定义实况电视输入源。 该服务向电视提供商发布频道和节目列表。 电视设备上的实时电视应用程序从TV提供商处获得可用频道和节目的列表,并将其显示给用户。 当用户选择特定频道时,实况电视应用程序通过电视输入管理器为相关电视输入服务创建一个会话,并告诉电视输入服务调谐到所请求的频道并将该内容播放到由电视应用。
图1.电视输入框架的功能图
电视输入框架旨在提供对各种实时电视输入源的访问,并将它们集中在一个用户界面中供用户浏览,查看和欣赏内容。 为您的内容构建电视输入服务可以使其在电视设备上更易于访问。
尝试电视输入服务示例应用程序。
主题
开发电视输入服务
-
了解如何开发可与系统电视应用程序配合使用的电视输入服务。
使用频道数据
-
了解如何描述系统的通道和程序数据。
管理用户交互
-
了解如何呈现叠加层,管理内容可用性以及处理内容选择。
支持时移
-
了解如何在电视输入服务中支持时间转换。
支持内容录制
-
了解如何在电视输入服务中支持内容录制。
电视输入服务代表媒体流来源,可让您以线性,广播电视形式呈现媒体内容作为频道和节目。 通过电视输入服务,您可以提供家长控制,节目指南信息和内容评级。 电视输入服务适用于Android系统电视应用程序。 此应用程序最终控制并在电视上呈现频道内容。 系统电视应用程序专为该设备开发,并由第三方应用程序不可变。 有关电视输入框架(TIF)架构及其组件的更多信息,请参阅电视输入框架 。
使用TIF Companion Library创建电视输入服务
TIF Companion Library是一个提供普通电视输入服务功能的可扩展实现的框架。 使用TIF Companion库快速轻松地创建您自己的电视输入服务,以遵循Android TV的最佳做法。
更新您的项目
要开始使用TIF Companion Library,请将以下内容添加到应用程序的build.gradle
文件中:
编译'com.google.android.libraries.tv:companionlibrary:0.2'
TIF Companion库目前不是Android框架的一部分。 它通过jcenter作为Gradle依赖关系分发,而不是与Android SDK分发。检查jcenter以查找最新版本的tif伴随库 。
在清单中声明您的电视输入服务
您的应用必须提供系统用来访问您的应用的TvInputService
兼容服务。 TIF Companion库提供了BaseTvInputService
类,它提供了可以自定义的TvInputService
的默认实现。 创建BaseTvInputService
的子类,并将清单中的子类声明为服务。
在清单声明中,指定BIND_TV_INPUT
权限以允许服务将电视输入连接到系统。 系统服务执行绑定并具有BIND_TV_INPUT
权限。 系统TV应用程序通过TvInputManager
接口向电视输入服务发送请求。
在你的服务声明中,包含一个intent过滤器,它指定TvInputService
为意图执行的动作。 还将服务元数据声明为单独的XML资源。 以下示例中显示了服务声明,意图过滤器和服务元数据声明:
<service android:name =“。rich.RichTvInputService”
机器人:标签= “@字符串/ rich_input_label”
机器人:权限= “android.permission.BIND_TV_INPUT”>
<! - 系统用来启动我们的帐户服务所需的过滤器。 - >
<意图滤波器>
<action android:name =“android.media.tv.TvInputService”/>
</意图滤波器>
<! - 描述此输入的XML文件。 这提供了指针
系统/电视应用程序的RichTvInputSetupActivity。 - >
<元数据
机器人:名字= “android.media.tv.input”
android:resource =“@ xml / richtvinputservice”/>
</服务>
在单独的XML文件中定义服务元数据。 服务元数据XML文件必须包含描述电视输入的初始配置和频道扫描的设置界面。元数据文件还应该包含一个标志,说明用户是否能够记录内容。 有关如何在您的应用中支持录制内容的更多信息,请参阅电视录制 。
服务元数据文件位于您的应用程序的XML资源目录中,并且必须与您在清单中声明的资源的名称相匹配。 使用前面示例中的清单条目,您将在res/xml/richtvinputservice.xml
创建XML文件,其中包含以下内容:
<?xml version =“1.0”encoding =“utf-8”?>
<tv-input xmlns:android =“http://schemas.android.com/apk/res/android”
机器人:canRecord = “真”
android:setupActivity =“com.example.android.sampletvinput.rich.RichTvInputSetupActivity”/>
定义频道并创建您的设置活动
您的电视输入服务必须定义至少一个用户通过系统电视应用访问的频道。 您应该在系统数据库中注册您的频道,并提供系统在无法找到您应用的频道时调用的设置活动。
首先,让您的应用程序读取和写入系统电子编程指南(EPG),其数据包括可供用户使用的频道和节目。 要使您的应用能够执行这些操作,并在设备重新启动后与EPG同步,请将以下元素添加到您的应用清单中:
<uses-permission android:name =“com.android.providers.tv.permission.READ_EPG_DATA”/>
<uses-permission android:name =“com.android.providers.tv.permission.WRITE_EPG_DATA”/>
<uses-permission android:name =“android.permission.RECEIVE_BOOT_COMPLETED”/>
添加以下元素以确保您的应用显示在Google Play商店中,作为在Android TV中提供内容频道的应用:
<用途特征
机器人:名字= “android.software.live_tv”
android:required =“true”/>