Android 的 FileProvider 是否真的支持外部文件路径?

Does Android's FileProvider actually support external-files-path?

我已经 运行 进入 FileUriExposedException 的东西,你试图将 file:/// Uri 发送到另一个应用程序(在本例中是相机),我应该改用 FileProvider(原因api 24 牛轧糖崩溃。

在我们的应用中,我们使用 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. documentation/FileProvider 真的是 broken/incorrect 吗?我应该用 cwac-provider 之类的东西代替吗?

更新

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

Am I right in thinking I should use external-files-path if I want to match how my app currently works?

是的。尽管请注意 getExternalFilesDir() does not officially support "attachments" as a parameter,所以如果有一天您的应用出现故障,请不要感到惊讶。

Is the documentation/FileProvider really broken/incorrect

好吧,我在新 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-v4,则尝试使用 support-core-utils)。

我有过类似的情况,即在未获得 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