首页 > 解决方案 > 如何在自己的应用程序中使用 3rd 方 TvProvider 对象?

问题描述

这里我们有一个示例应用程序,它为 Android TV 注册了一个频道,因此这些频道是由操作系统在主屏幕上提供的。

假设像 Netflix、Prime 等内容提供商为每个人提供一个频道,我如何在我的应用中显示这些频道?

标签: androidandroid-tv

解决方案


这些TvProviders 只能由 Android 系统访问。创建频道时,您需要在系统中为该频道注册一个提供者——这就是TvProviders 的本质。您几乎无法以正确的方式在您自己的应用程序中显示您的频道——leanback库没有提供默认的频道 UI——因此您必须自己为它创建一个 UI 或在leanback 组件中进行修改。

您只能使用您创建的频道。您可以创建、更新和管理对它们的访问 - 仅此而已。您在频道创建时提供的所有 UI 内容和内容使用都处理 Android TV 系统。

在您的应用程序中无法访问其他供应商TvProvider和渠道,我想永远不会有。

这是查询 TvProvider 中所有可用频道的方法

private val CHANNELS_MAP_PROJECTION = arrayOf(
    TvContractCompat.Channels._ID,
    TvContractCompat.Channels.COLUMN_INTERNAL_PROVIDER_ID,
    TvContractCompat.Channels.COLUMN_BROWSABLE
)

context.contentResolver.query(
    TvContractCompat.Channels.CONTENT_URI,CHANNELS_MAP_PROJECTION, 
    null, null, null
)        

是一个来自 googlecodelabs 如何正确使用 TvProvider 调用的简洁示例。

是来自同一应用程序的一个示例,说明如何将您的频道添加到 TvProvider。

以下是 Android 电视如何与电视提供商合作的完整流程以及一般限制和可能性描述

因此,您根本无法做到。只有具有signature / signatureOrSystemprotectionLevel 的应用程序才能使用它。唯一使用这种保护级别的应用程序是应用程序供应商使用与 AOSP 本身相同的密钥签名和/或将它们放置在特殊文件夹中 - 只有设备供应商可以这样做(或者您,但只能在有根设备上)。对于一般的消费者应用程序来说,你想要的东西是不可能的。


推荐阅读