【问题标题】:Does Android's FileProvider actually support external-files-path?Android 的 FileProvider 真的支持 external-files-path 吗?
【发布时间】:2016-08-30 12:37:31
【问题描述】:

我遇到了 FileUriExposedException 问题,您尝试将 file:/// Uri 发送到另一个应用程序(在本例中为相机),我应该使用 FileProvider 代替(导致 api 24 Nougat 崩溃)。

在我们的应用中,我们使用 Context 的getExternalFilesDir(String) 方法生成一个文件:

context.getExternalFilesDir("attachments");

FileProvider documentation 让我相信我应该在我的paths.xml 中使用external-files-path,如果我希望功能与现在相同。

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-files-path
        name="attachments"
        path="attachments/" />
</paths>

但是在谷歌上搜索了一些之后,我发现了一些让我认为 FileProvider 存在问题的东西,或者至少是 FileProvider 的文档......

所以

  1. 如果我想匹配我的应用当前的工作方式,我是否认为应该使用 external-files-path
  2. 文档/FileProvider 真的损坏/不正确,我应该改用 cwac-provider 之类的东西吗?

更新

为了完整起见,正如下面@CommonsWare 建议的那样,使用 24.2.0 版本的 support-v4 对我有用。

【问题讨论】:

    标签: android commonsware-cwac android-fileprovider android-7.0-nougat


    【解决方案1】:

    如果我想匹配我的应用当前的工作方式,我是否认为应该使用 external-files-path?

    是的。虽然请注意getExternalFilesDir() does not officially support "attachments" as a parameter,所以如果您的应用程序有一天中断,请不要感到惊讶。

    文档/FileProvider 是否真的损坏/不正确

    好吧,我在新 support-core-utils 工件的 24.2.0 的源 JAR 中看到了支持 external-files-path 的代码。 support-v4,截至 24.2.0,已细分为一系列单独的工件,FileProvider 位于 support-core-utils

    因此,请尝试使用 support-v4 的 24.2.0(或 support-core-utils,如果您不需要所有 support-v4)。

    【讨论】:

    • 哇!感谢您非常迅速和非常有帮助的回复!我将尝试 24.2 support-v4。另一方面——你的意思是它不支持“附件”,因为我提供的String type 参数理想情况下应该是文档中提到的参数之一(以DIRECTORY_... 开头)?
    • @Josh:是的,理想情况下它是null 或声明的支持值之一。 可能他们将继续支持任意字符串,因为他们从未在这里实施检查,但我们不能排除他们将开始执行规则的可能性。
    • 嗯,我明白了。感谢您指出了这一点!这是我们将要研究的东西。非常有用的东西!
    【解决方案2】:

    我有类似的情况,将私人文件共享到相机以上传完整质量的图像,而无需向 WRITE_EXTERNAL_STORAGE 授予权限。

    我能够通过使用 使其工作,如下所示

    <?xml version="1.0" encoding="utf-8"?>
    <paths>
        <external-path
            name="my_images"
            path="Android/data/com.santhoshn.appprivateimageupload/files/Pictures" />
    </paths>
    

    这是工作示例应用程序https://github.com/santbob/AppPrivateImageUpload

    【讨论】:

    • 虽然链接可能会回答问题,但最好在回答中包含信息的关键部分。这使用户即使链接断开也能找到信息。此外,与通过外部链接查看相比,这让用户更容易找到信息。
    • 感谢您的输入,将更新我的原始回复
    猜你喜欢
    • 2012-07-21
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2012-09-26
    • 1970-01-01
    • 2014-01-03
    • 2012-08-11
    相关资源
    最近更新 更多