TV 输入框架

Android TV HAL icon

Android TV 输入框架 (TIF) 简化了向 Android TV 传送直播内容的过程。Android TIF 为制造商提供了一个标准 API,用于创建输入模块以控制 Android TV,并通过 TV 输入发布的元数据启用直播电视搜索和推荐。

该框架并不寻求实现电视标准或区域要求,但确实让设备制造商能够更轻松地满足区域数字电视广播标准,而无需重新实现。本节中的文档可能对想要创建自定义 TV 输入的第三方应用开发者也很有用。

组件

Android TV 输入框架实现包括一个 TV 输入管理器。TIF 与 TV 应用(一个无法被第三方应用替换的系统应用)协同工作,以访问内置和 IP 调谐器频道。TV 应用通过 TV 输入管理器与设备制造商或其他方提供的 TV 输入模块通信。

TV 输入框架包含以下组件:

  • TV 提供商 (com.android.providers.tv.TvProvider):频道、节目和相关权限的数据库
  • TV 应用 (com.android.tv.TvActivity):处理用户互动的应用
  • TV 输入管理器 (android.media.tv.TvInputManager):允许 TV 输入与 TV 应用通信
  • TV 输入:表示物理或虚拟调谐器和输入端口的应用
  • TV 输入 HAL (tv_input 模块):一种硬件定义,允许系统 TV 输入在实现时访问特定于电视的硬件
  • 家长控制:允许阻止频道和节目的技术
  • HDMI-CEC:允许通过 HDMI 远程控制各种设备的技术
  • 调谐器框架:用于内置调谐器 TV 输入的框架
  • MediaCas:用于条件访问的框架
  • 调谐器资源管理器:一项用于管理 TV 输入、MediaCas 和内置调谐器输入的硬件资源的服务

以下将详细介绍这些组件。有关 Android TV 输入框架架构的详细视图,请参见下图。

Overview of the Android TIF architecture
图 1. Android TV 输入框架 (TIF) 架构

流程

以下是架构的运作方式:

  1. 用户看到 TV 应用(一个无法被第三方应用替换的系统应用)并与之互动。
  2. TV 应用显示来自 TV 输入的 AV 内容。
  3. TV 应用无法直接与 TV 输入对话。TV 输入管理器会识别 TV 应用的 TV 输入状态。有关这些限制的更多详情,请参见下文的TV 输入管理器

权限

  • 只有 signatureOrSystem TV 输入和 TV 应用才能完全访问 TV 提供商数据库,并且能够接收 KeyEvents。
  • 只有系统 TV 输入才能通过 TV 输入管理器服务访问 TV 输入 HAL。TV 输入通过 TV 输入管理器会话一对一访问。
  • 第三方 TV 输入具有软件包锁定的 TV 提供商数据库访问权限,并且只能对匹配的软件包行执行读取/写入操作。
  • 第三方 TV 输入可以显示其自己的内容或设备制造商的直通 TV 输入(例如 HDMI1)的内容。它们无法显示来自非直通 TV 输入(例如内置或 IPTV 调谐器)的内容。
  • 硬件 TV 输入应用的 TV_INPUT_HARDWARE 权限会向 TV 输入管理器服务发出信号,以在启动时通知 TV 输入服务调用 TV 输入管理器服务并添加其 TV 输入。此权限允许硬件 TV 输入应用支持每个 TV 输入服务的多个 TV 输入,以及动态添加和移除其支持的 TV 输入。

TV 提供商

TV 提供商数据库存储来自 TV 输入的频道和节目。TV 提供商还发布和管理相关权限,以便 TV 输入只能看到自己的记录。例如,特定的 TV 输入只能看到它提供的频道和节目,并且被禁止访问任何其他 TV 输入的频道和节目。

TV 提供商在内部将“广播类型”映射到“规范类型”。TV 输入负责使用底层广播标准中的值填充“广播类型”,并且“规范类型”字段将自动填充 android.provider.TvContract.Genres 中的正确关联类型。例如,对于广播标准 ATSC A/65 和类型为 0x25(表示“体育”)的节目,TV 输入将使用字符串“体育”填充“广播类型”,TV 提供商将使用映射值 android.provider.TvContract.Genres.SPORTS 填充“规范类型”字段。

有关 TV 提供商的详细视图,请参见下图。

Android TV Provider
图 2. Android TV 提供商

只有特权系统分区中的应用才能读取整个 TV 提供商数据库。

直通 TV 输入不存储频道和节目。

除了频道和节目的标准字段外,TV 提供商数据库还在每个表中提供 BLOB 类型字段 COLUMN_INTERNAL_PROVIDER_DATA,TV 输入可以使用该字段存储任意数据。该 BLOB 数据可以包含自定义信息,例如关联调谐器的频率,并且可以以协议缓冲区或其他形式提供。搜索字段可用于使某些频道在搜索中不可用(例如,为了满足特定国家/地区的内容保护要求)。

数据库字段示例

TV 提供商支持频道 (android.provider.TvContract.Channels) 和节目 (android.provider.TvContract.Programs) 表中的结构化数据。这些表由 TV 输入和系统应用(如 TV 应用)填充和访问。这些表有四种类型的字段:

  • 显示:显示字段包含应用可能希望向用户显示的信息,例如频道的名称 (COLUMN_DISPLAY_NAME) 或号码 (COLUMN_DISPLAY_NUMBER),或者正在观看的节目的标题。
  • 元数据:根据相关标准,有三个字段用于识别内容,例如频道的传输流 ID (COLUMN_TRANSPORT_STREAM_ID)、原始网络 ID (COLUMN_ORIGINAL_NETWORK_ID) 和服务 ID (COLUMN_SERVICE_ID)。
  • 内部数据:供 TV 输入自定义使用的字段。
    某些字段(如 COLUMN_INTERNAL_PROVIDER_DATA)是可自定义的 BLOB 字段,TV 输入可以在其中存储有关其频道或节目的任意元数据。
  • 标志:标志字段表示是否应限制频道进行搜索、浏览或观看。这只能在频道级别设置。所有节目都服从频道的设置。
    • COLUMN_SEARCHABLE:在某些地区,限制某些频道的搜索可能是一项要求。COLUMN_SEARCHABLE = 0 表示该频道不应在搜索结果中显示。
    • COLUMN_BROWSABLE:仅对系统应用可见。限制应用浏览频道。COLUMN_BROWSABLE = 0 表示该频道不应包含在频道列表中。
    • COLUMN_LOCKED:仅对系统应用可见。限制无效帐户观看频道,除非输入 PIN 码。COLUMN_LOCKED = 1 表示该频道应受到家长控制保护。

有关字段的更详尽列表,请参见 android/frameworks/base/media/java/android/media/tv/TvContract.java

权限和访问控制

所有字段对任何有权访问相应行的人员均可见。用户无法直接访问任何字段;他们只能看到 TV 应用、系统应用或 TV 输入呈现的内容。

  • 每行都有 PACKAGE_NAME,即拥有该行的软件包(应用),在通过 TvProvider.java 进行查询、插入、更新时进行检查。TV 输入可能只能访问其编写的信息,并且与其他 TV 输入提供的信息隔离开来。
  • 通过 AndroidManifest.xml 进行读取、写入权限(需要用户同意)以确定可用频道。
  • 只有 signatureOrSystem 应用才能获取 ACCESS_ALL_EPG_DATA 权限以访问整个数据库。

TV 输入管理器

TV 输入管理器为整个 Android TV 输入框架提供了一个中央系统 API。它仲裁应用和 TV 输入之间的互动,并提供家长控制功能。TV 输入管理器会话必须与 TV 输入一对一创建。TV 输入管理器允许访问已安装的 TV 输入,以便应用可以:

  • 列出 TV 输入并检查其状态
  • 创建会话并管理监听器

对于会话,TV 应用可能只能将 TV 输入调谐到它已添加到 TV 提供商数据库的 URI,但直通 TV 输入除外,直通 TV 输入可以使用 TvContract.buildChannelUriForPassthroughInput() 进行调谐。TV 输入也可以设置其音量。由设备制造商提供和签名(签名应用)的 TV 输入或系统分区中安装的其他应用将有权访问整个 TV 提供商数据库。此访问权限可用于构建应用以浏览和搜索所有可用的电视频道和节目。

应用可以创建和注册 TvInputCallback 以及 android.media.tv.TvInputManager,以便在 TV 输入的状态更改或 TV 输入的添加或移除时回调。例如,当 TV 输入断开连接时,TV 应用可以做出反应,将其显示为断开连接并阻止其选择。

TV 输入管理器抽象化了 TV 应用和 TV 输入之间的通信。TV 输入管理器和 TV 输入的标准接口允许多个设备制造商创建自己的 TV 应用,同时帮助所有第三方 TV 输入在所有 TV 应用上工作。

TV 输入

TV 输入在某种意义上是 Android 应用,它们具有 AndroidManifest.xml 并且已安装(通过 Play 商店、预安装或侧载)。Android TV 支持预安装的系统应用、设备制造商签名的应用和第三方 TV 输入。

某些输入(如 HDMI 输入或内置调谐器输入)只能由制造商提供,因为它们直接与底层硬件通信。其他输入(如 IPTV、异地转移和外部 STB)可以由第三方作为 APK 在 Google Play 商店中提供。下载并安装后,可以在 TV 应用中选择新输入。

直通输入示例

Android TV System Input
图 3. Android TV 系统输入

在此示例中,设备制造商提供的 TV 输入是可信的,并且具有对 TV 提供商的完全访问权限。作为直通 TV 输入,它不会向 TV 提供商注册任何频道或节目。要获取用于引用直通输入的 URI,请使用 android.media.tv.TvContract 实用程序方法 buildChannelUriForPassthroughInput(String inputId)。TV 应用与 TV 输入管理器通信以访问 HDMI TV 输入。

内置调谐器示例

Android TV Built-in Tuner Input
图 4. Android TV 内置调谐器输入

在此示例中,设备制造商提供的内置调谐器 TV 输入是可信的,并且具有对 TV 提供商的完全访问权限。

第三方输入示例

Android TV third-party input
图 5. Android TV 第三方输入

在此示例中,外部 STB TV 输入由第三方提供。由于该 TV 输入无法直接访问传入的 HDMI 视频馈送,因此它必须通过 TV 输入管理器并使用设备制造商提供的 HDMI TV 输入。

通过 TV 输入管理器,外部 STB TV 输入可以与 HDMI TV 输入对话并要求其在 HDMI1 上显示视频。因此,STB TV 输入可以控制电视,而制造商提供的 HDMI TV 输入则呈现视频。

画中画 (PIP) 示例

Android TV KeyEvents
图 6. Android TV KeyEvents

上图显示了如何将遥控器上的按钮传递到特定的 TV 输入以进行画中画 (PIP) 显示。这些按钮按下操作由设备制造商提供的硬件驱动程序解释,将硬件扫描码转换为 Android 键码,并将它们传递到标准的 Android 输入管道 InputReaderInputDispatcher 函数,作为 KeyEvents。如果 TV 应用处于焦点状态,这些键事件会依次触发 TV 应用上的事件。

只有系统 TV 输入才有资格接收 InputEvents,并且只有在它们具有 RECEIVE_INPUT_EVENT 系统权限的情况下才行。TV 输入负责确定要使用哪些 InputEvents,并且应允许 TV 应用处理它不需要使用的键。

TV 应用负责了解哪个系统 TV 输入处于活动状态(即用户选择的输入),并消除传入 KeyEvents 的歧义,并将它们路由到正确的 TV 输入管理器会话,调用 dispatchInputEvent() 以将事件传递到关联的 TV 输入。

MHEG-5 输入示例

下图更详细地显示了 KeyEvents 如何通过 Android TIF 路由。

Android TV Red button example
图 7. Android TV 红色按钮示例

它描述了红色按钮应用的流程,这种应用在欧洲很常见,用于让用户访问电视上的互动应用。应用可以通过此传输流传送。当用户点击该按钮时,他们可以与这些广播应用互动。例如,您可以使用这些广播应用来访问相关的网页或体育比分。

请参阅广播应用部分,了解广播应用如何与 TV 应用互动。

在此示例中:

  1. TV 应用处于焦点状态并接收所有键。
  2. KeyEvents(例如红色按钮)作为 InputEvents 传递到活动 TV 输入。
  3. 系统 TV 输入与 MHEG-5 堆栈集成,并具有 RECEIVE_INPUT_EVENT 系统权限。
  4. 在接收到激活键码(例如红色按钮)时,TV 输入会激活广播应用。
  5. TV 输入将 KeyEvents 用作 InputEvents,并且广播应用处于焦点状态并处理 InputEvents,直到被关闭。

注意:第三方 TV 输入永远不会接收键。

TV 输入 HAL

TV 输入 HAL 帮助开发 TV 输入以访问特定于电视的硬件。与其他 Android HAL 一样,TV 输入 HAL (tv_input) 在 AOSP 源代码树中可用,供应商开发其实现。

注意:从 Android 14 开始,TV 输入 HAL 接口使用 AIDL 定义。

TV 应用

系统 TV 应用向用户呈现直播电视内容。Android 平台随附了一个参考 TV 应用(Live TV),设备制造商可以按原样使用、自定义、扩展或替换它。源代码在 Android 开源项目中可用,您可以从参考电视应用文章中开始使用它。

设备制造商可以扩展其 TV 应用以实现设备制造商或国家/地区特定的功能,但这不属于 TIF 或参考 TV 应用的范围。

系统 TV 应用至少需要处理以下任务:

设置和配置

  • 自动检测 TV 输入
  • 让 TV 输入启动频道设置
  • 控制家长设置
  • 编辑频道

观看

  • 访问和浏览所有电视频道
  • 访问电视节目信息栏
  • 显示电子节目指南 (EPG) 数据
  • 支持多个音频和字幕轨道
  • 提供家长控制 PIN 码质询
  • 允许 TV 输入 UI 叠加层用于电视标准(HbbTV 等)
  • 填充电视频道和节目的搜索结果
  • 显示应用链接卡片
  • 支持时移 API
  • 处理 DVR 功能并支持电视录制 API

此功能集将随着平台 TIF API 扩展的新 Android 版本而增加。CTS 验证程序提供兼容性测试覆盖。

对第三方 TV 输入的支持

Android TV 为第三方 TV 输入提供开发者 API,使已安装的应用能够将软件频道传送到直播电视体验中。为了确保兼容的 Android 设备实现,系统 TV 应用在向用户呈现第三方 TV 输入和频道方面承担着一些责任。参考 Live TV 应用提供了兼容的实现;如果替换系统 TV 应用,设备制造商必须确保他们自己的应用提供类似的兼容性,以满足所有 Android TV 设备上的开发者期望。

系统 TV 应用必须与设备的默认直播电视服务一起呈现第三方输入。开发者 API 的承诺是,用户将能够在他们的标准电视体验中找到频道(安装后)。

允许在内置频道和第三方频道之间进行视觉区分,如 Android CDD 的 TV 应用部分中所定义。

以下部分展示了 Live TV 应用如何满足 CDD 要求。

新频道设置

添加新的第三方输入/频道始于用户从应用商店(如 Google Play)查找和安装 TV 输入。

某些第三方 TV 输入会自动将频道添加到 TvProvider 数据库。但是,大多数第三方 TV 输入将提供一个设置 Activity,以使用户能够设置他们的频道、提供登录详细信息以及执行其他操作。系统 TV 应用需要确保用户可以激活此设置 Activity,这就是 CDD 要求第三方输入只需通过最少的导航操作即可从主 TV 应用访问的原因。

参考 Live TV 应用提供了“频道来源”菜单,用于访问输入。

Go to Settings
图 8. 转到设置

Go to Channel source in Settings
图 9. 转到设置中的频道来源

Select your source from the list.
图 10. 从列表中选择您的来源。

Add channels from your source
图 11. 从您的来源添加频道。

此外,在安装新的 TvInput 后,TV 应用菜单顶部会显示一个通知卡片,以便用户直接转到设置

Notification that shows new channel sources are available.
图 12. 显示新频道来源可用的通知。

如果用户通过通知采取操作,他们可以选择设置他们的来源,如图 10 所示。

有关此区域中开发者期望的信息,请参阅定义您的 TV 输入服务

自定义频道列表

设备制造商可以提供 UI 来隐藏某些频道,并使用户能够管理自己的 EPG。Live TV 包括此功能。

Open the channel list in Settings.
图 13.设置中打开频道列表。

Customize your channel list.
图 14. 自定义您的频道列表。

EPG

第三方输入开发者需要确信用户可以在一般使用期间轻松导航到他们的频道,在所有兼容的 Android TV 设备上都是如此。

来自第三方输入的频道必须作为设备标准直播电视体验 EPG 的一部分呈现。可以使用第三方频道的视觉分隔或单独类别(请参阅 Android CDD 的 TV 应用部分)—关键是用户能够找到他们已安装的频道。

制造商必须实现 TV 应用以包含全局搜索请求的搜索结果,以确保最佳用户体验。Live TV 提供了一个实现(请参阅 它提供了来自第三方输入(平台兼容性所必需)以及内置输入的结果。

时移

对于 Android 6.0 及更高版本上的设备,TV 应用必须支持 Android 框架 时移 API。此外,制造商必须在 TV 应用中实现播放控件,这允许用户暂停、恢复、倒带和快进播放。

对于支持时移的 TV 输入,TV 应用需要显示播放控件。

Playback controls
图 15. 播放控件

DVR

对于 Android 7.0 及更高版本上的设备,TV 应用必须支持 Android 框架 电视录制 API,以支持、列出和播放录制的节目。

这允许设备制造商将其 DVR 子系统插入 TIF,并大大减少在电视设备上启用或集成 DVR 功能所需的工作量。它还使第三方能够提供可以插入 Android TV 设备的售后 DVR 系统。

除了录制直播内容外,TV 应用还处理资源冲突。例如,如果设备有两个调谐器,它可以同时录制两个节目。如果用户请求录制三个节目,TV 应用必须处理冲突,并且应该显示通知或请求用户为这些请求安排优先级。

TV 应用还可以实现更复杂的逻辑,例如在用户请求录制一个剧集时,询问他们是否要录制系列剧中的所有未来剧集。

有关 Android TV 中可能的 DVR 实现的视图,请参见下图。

Digital video recording in Android TV
图 16. Android TV 中的数字视频录制

  1. TV 输入服务告诉 TV 应用有多少调谐器可用,以便 TV 应用可以处理可能的资源冲突。
  2. TV 应用接收用户发起的录制电视节目的请求。
  3. TV 应用将其内部数据库中的录制计划存储起来。
  4. 当到录制时间时,TV 应用会传递一个请求以调谐到与录制关联的频道。
  5. TV 输入服务接收此请求,响应是否有适当的资源,并调谐到频道。
  6. 然后,TV 应用传递一个请求以开始向 TV 输入管理器录制。
  7. TV 输入服务接收此请求并开始录制。
  8. TV 输入服务将其存储中的实际视频数据存储起来,可以是外部存储或云存储。
  9. 当到结束录制时,TV 应用将停止录制请求传递到 TV 输入管理器。
  10. 一旦 TV 输入服务收到请求,它就会停止录制并将其关联的元数据添加到 TV 提供商,以便 TV 应用可以在用户请求时向用户显示录制内容。

有关在 TV 输入服务中实现录制功能的更多信息,请参阅此电视录制文章。

实用资源

  • Android CDD 和记录在案的开发者 API 是权威参考。
  • CTS 验证程序作为兼容性测试程序的一部分行使 API。针对 Live TV 运行此程序可能是查看 EPG、搜索、家长控制以及第三方输入上下文中其他要求的有用方法。
  • 有关此区域中开发者期望的信息,请参阅定义您的 TV 输入服务

家长控制

家长控制允许用户阻止不需要的频道和节目,但可以通过输入 PIN 码来绕过阻止。

家长控制功能的责任由 TV 应用、TV 输入管理器服务、TV 提供商和 TV 输入共同承担。

家长控制是强制性的,并且由 CTS 验证程序覆盖。

许多国家/地区定义了分级系统,TV 输入可以通过 TvContentRating API 使用这些分级系统。此外,TV 输入可以注册自己的自定义分级系统,如 CTS 验证程序测试所示,该测试引入了“虚假”分级。对于存在标准分级系统的国家/地区,鼓励设备制造商将 TV 输入框架家长控制与他们可能包含的任何其他机制结合使用。

TV 提供商

每个频道行都有一个 COLUMN_LOCKED 字段,该字段用于锁定特定频道,使其在未输入 PIN 码的情况下无法观看。节目字段 COLUMN_CONTENT_RATING 旨在用于显示,而不是用于强制执行家长控制。

TV 输入管理器

TV 输入管理器存储每个被阻止的 TvContentRating,并响应 isRatingBlocked() 以建议是否应阻止具有给定分级的内容。

TV 输入

当显示内容的评级发生更改(在节目或频道更改时)或家长控制设置发生更改时(在 ACTION_BLOCKED_RATINGS_CHANGEDACTION_PARENTAL_CONTROLS_ENABLED_CHANGED 时),TV 输入会通过调用 TV 输入管理器上的 isRatingBlocked() 来检查当前内容是否应被阻止。如果内容应被阻止,则 TV 输入会禁用音频和视频,并通过调用 notifyContentBlocked(TvContentRating) 通知 TV 应用当前内容已被阻止。如果内容不应被阻止,则 TV 输入会启用音频和视频,并通过调用 notifyContentAllowed() 通知 TV 应用当前内容被允许。

TV 应用

为了遵守家长控制 API,从而创建一个兼容的平台,系统 TV 应用需要提供一种方法,供用户管理家长控制,包括特定应用注册的任何自定义分级。

当 TV 应用收到 TV 输入的通知,指示当前内容被阻止,或者当用户尝试观看被阻止的频道时,TV 应用会显示 PIN 码 UI。

TV 应用不直接存储家长控制设置。当用户更改家长控制设置时,每个被阻止的 TvContentRating 都会由 TV 输入管理器存储,而被阻止的频道则由 TV 提供商存储。

TV 应用需要声明权限 android.permission.MODIFY_PARENTAL_CONTROLS 才能更改家长控制设置。

鼓励设备制造商:

  • 针对参考 Live TV 应用执行 CTS 验证程序家长控制测试,以演示兼容性要求。
  • 将 Live TV 应用用作其自身 TV 应用的参考:特别是查看 ContentRatingsManagerRatingSystemsFragment 源代码,以及它们如何处理自定义分级。

HDMI-CEC

HDMI-CEC 允许一个设备控制另一个设备,从而使单个遥控器能够控制家庭影院中的多个设备。Android TV 使用它来加速设置,并允许通过中央 TV 应用远程控制各种 TV 输入。例如,它可以切换输入、启动或关闭设备等等。

Android TIF 将 HDMI-CEC 实现为 HDMI 控制服务,以便设备制造商只需开发与轻量级 Android TV HAL 交互的低级驱动程序,从而跳过更复杂的业务逻辑。通过提供标准实现,Android 寻求通过减少碎片化实现和选择性功能支持来缓解兼容性问题。HDMI 控制服务使用现有的 Android 服务,包括输入和电源。

这意味着需要重新设计现有的 HDMI-CEC 实现,以便与 Android TIF 互操作。我们建议硬件平台包含一个微处理器,以接收 CEC 开机和其他命令。

CEC integration on Android TV
图 17. Android TV 上的 CEC 集成

  1. CEC 总线从当前活动的源接收命令,以切换到不同的源。
  2. 驱动程序将命令传递到 HDMI-CEC HAL。
  3. HAL 通知所有 ActiveSourceChangeListeners
  4. HDMI 控制服务通过 ActiveSourceChangeListener 接收源更改通知。
  5. TV 输入管理器服务生成一个 Intent,用于 TV 应用切换源。
  6. 然后,TV 应用为要切换到的 TV 输入创建一个 TV 输入管理器会话,并在该会话中调用 setMain
  7. TV 输入管理器会话将此信息传递给 HDMI TV 输入。
  8. HDMI TV 输入请求设置边带 Surface。
  9. 当 Surface 设置完成后,TV 输入管理器服务生成一个相应的路由控制命令返回给 HDMI 控制服务。

TV 集成指南

广播应用

由于每个国家/地区都有特定于广播的要求(MHEG、Teletext、HbbTV 等),因此制造商需要为其广播应用提供自己的解决方案,例如

  • MHEG:原生堆栈
  • 图文电视:原生堆栈
  • HbbTV:Vewd Software 的 HbbTV 解决方案

在 Android L 版本中,Android TV 希望设备制造商使用系统集成商或 Android 解决方案来处理区域 TV 堆栈,将 Surface 传递给 TV 软件堆栈,或传递必要的按键代码以与旧版堆栈进行交互。

以下是广播应用和 TV 应用的交互方式

  1. TV 应用处于焦点状态,接收所有按键。
  2. TV 应用将按键(例如,红色按钮)传递给 TV 输入设备。
  3. TV 输入设备在内部与旧版 TV 堆栈集成。
  4. 接收到激活键码(例如,红色按钮)后,TV 输入设备激活广播应用。
  5. 广播应用在 TV 应用中获取焦点并处理用户操作。

对于语音搜索/推荐,广播应用可以支持应用内搜索以进行语音搜索。