如何在自己的应用程序中使用 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】:那些TvProvider
s 只能由 Android 系统访问。创建频道时,您需要在系统中为该频道注册一个提供者——这就是TvProvider
s 的本质。您几乎无法在自己的应用程序中以正确的方式显示您的频道 - leanback 库没有提供默认的频道 UI - 因此您必须自己创建一个 UI 或在leanback 组件中进行修改。
您只能使用您创建的频道。您可以创建、更新和管理对它们的访问 - 仅此而已。您在频道创建时提供的所有 UI 内容和内容使用都处理 Android TV 系统。
在您的应用程序中无法访问其他供应商TvProvider
s 和渠道,我想永远不会有。
这里是查询 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 对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node-RED 中使用 3rd 方 oauth 服务器包含单点登录?
在没有 3rd 方工具/项目的 MFC C++ 版本中查找内存泄漏