【问题标题】:How to use 3rd party TvProvider objects in own app?如何在自己的应用程序中使用 3rd 方 TvProvider 对象?
【发布时间】: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 等内容提供商为每个人提供一个频道,我如何在我的应用中显示这些频道?

【问题讨论】:

    标签: android android-tv


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多