【问题标题】:How do you get access to the raw of a different app using uri?您如何使用 uri 访问不同应用程序的原始数据?
【发布时间】:2014-05-30 16:49:06
【问题描述】:

有没有办法通过清单设置或类似的方式访问不同应用程序的原始数据?我正在尝试访问应用的原始 mp3 以在不同的应用上播放。

【问题讨论】:

    标签: android mp3 uri android-mediaplayer


    【解决方案1】:

    如果“原始”是指另一个应用程序的 /res/raw/ 文件夹的内容,则不能。至少没有超级用户/根访问权限。

    理论上,您可以在您的 PC 上手动拆开相关应用程序,并根据需要使用它们的资源,但这可能充其量是违反他们的 TOS,最坏的情况是侵犯版权。

    但是,如果您可以控制包含您想要访问的资源的相关应用,则可以定义 ContentProvider 以允许公共访问。也许应用程序甚至已经有一个?


    编辑:您现在已经澄清您可以访问这两个应用程序,因此您当然可以与自己分享您喜欢的任何内容。

    如上所述,您可以使用ContentProvider 在应用程序之间共享资源或信息。在这种特殊情况下,您希望共享一个音频 *.mp3 文件,我建议使用继承自 ContentProviderFileProvider

    我会将实现细节留给链接的官方 Android 文档,因为他们在解释方面做得比我以往任何时候都好。

    简而言之:

    • 保存音频文件的应用 A 定义了一个 FileProvider。
    • 应用 B 向应用 A 发出 Intent 请求以获取文件(带有可选身份验证)
    • 应用 A 可以立即返回文件,也可以向应用 B 提供文件选择。
    • 应用 B 要么使用接收到的提供程序并获取其文件,要么告诉应用 A 它想要哪个文件。
    • 应用 A 现在可以将所选文件传递给使用该文件的应用 B。

    附:作为一些睡前阅读,您可以查看链接到 github 存储库的替代实现,并解释 SO 自己的 CommonsWare 项目的用法:https://stackoverflow.com/a/14734310/1590950

    【讨论】:

    • 我正在尝试使用我的一个应用程序的 mp3 raw 在另一个应用程序上播放。它们都用相同的 UID 链接,它应该可以工作。
    • 然后你应该在提供资源的应用程序中定义一个 ContentProvider 并在接收资源的应用程序中使用它。在我的答案中链接。
    • 您如何将 mp3 放入 ContentProvider 中?似乎它只包含原始类型。
    • 我在上面编辑了我的答案以包含一个适合新信息的答案。
    • FileProvider 是否允许访问应用程序的原始数据或重新定位原始数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2021-01-02
    • 2023-03-30
    • 1970-01-01
    • 2017-07-13
    • 2010-09-15
    • 2020-10-21
    相关资源
    最近更新 更多