如何在自己的应用程序中使用第三方 TvProvider 对象?

How to use 3rd party TvProvider objects in own app?

Here we have a sample app, what registers a channel for Android TV, so these channels are provided on the home screen 由操作系统决定。

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

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

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

无法从您的应用中访问其他供应商 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
)        

Here 是 googlecodelabs 中关于如何正确使用 TvProvider 调用的简洁示例。

Here 是同一应用中的一个示例,说明如何将您的频道添加到 TvProvider。

Here is the whole flow of how Android Tv works with Tv Providers and general limitations 和可能性描述

所以你根本做不到。只有具有 signature /signatureOrSystem 保护级别的应用才能使用它。使用这种保护级别的唯一应用程序是应用程序供应商使用与 AOSP 本身相同的密钥签名 and/or 将它们放在一个特殊的文件夹中 - 只有设备供应商可以这样做(或者你,但只能在有根设备上)。你想要的,一般消费级app是做不到的。