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

Posted

技术标签:

【中文标题】如何在自己的应用程序中使用 3rd 方 TvProvider 对象?【英文标题】:How to use 3rd party TvProvider objects in own app? 【发布时间】:2021-03-14 10:15:42 【问题描述】:

Here we have a sample app,为android TV注册频道,操作系统so these channels are provided on the home screen。

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

【问题讨论】:

【参考方案1】:

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

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

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

这里是查询 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 是 Android 电视如何与电视提供商和一般limitations 和可能性描述一起工作的整个流程

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

【讨论】:

ContentProvider 怎么样?我不应该能够通过“ContentResolver”“查询()”预览程序吗? 您可以做到,但只能使用您的应用自己的 TvProvider。 我以为 ContentProviders 是用来向其他应用提供数据的? 是的。但是您也可以在自己的应用程序中使用它,而且我们正在将我们的应用程序数据提供给其他应用程序 - 提供给 Android TV 启动器、Watch Next App 等。他们在这里所做的是将这个特定 Provider 的使用仅限于 Android系统应用程序和创建它的应用程序。我认为这是由于特定视频的内容许可和/或某些扩展功能(交互性、叠加层等)而制作的。因为当您在频道视频上按播放时,它会在提供视频的应用程序内播放。部分系统默认播放器不播放。 Here - 更具体地说是here

以上是关于如何在自己的应用程序中使用 3rd 方 TvProvider 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 3rd 方应用中基于 API 调用和回调触发函数

如何在 Node-RED 中使用 3rd 方 oauth 服务器包含单点登录?

3rd 方连接池的优势

在没有 3rd 方工具/项目的 MFC C++ 版本中查找内存泄漏

如何使用 Appium 在真实设备上自动化 3rd 方 ios 应用程序

如何在 Angularjs 中使用 3rd 方登录来处理身份验证