Android版本9中的FileProvider问题

时间:2019-04-01 10:37:10

标签: android

我最近在Fabric中收到了有关文件提供商的崩溃报告。在Android版本<9中,文件提供商似乎可以正常工作,但是在版本9中,尤其是ONEPLUS A6010。崩溃报告说

Caused by java.lang.IllegalArgumentException Failed to find configured root that contains /storage/emulated/999/WhatsApp/Media/WhatsApp Images/IMG-20190328-WA0072.jpg

我已经看到sdcard的存储路径,例如/storage/emulated/0/...。 因此,我开始在Google上搜索存储路径/storage/emulated/999,发现该路径与Parallel App Storage相关。

我的fileprovider.xml

  <?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="/storage/emulated/0"
        path="." />
</paths>

我对如何处理并行应用程序存储(有关崩溃)一无所知。我在Stackoverflow中进行了搜索,找到了仅针对sdcard路径(即/storage/emulated/0,而不是存储路径/storage/emulated/999)的解决方案。有人遇到过这次坠机吗?

完整的崩溃日志

Caused by java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/999/WhatsApp/Media/WhatsApp Images/IMG-20190328-WA0072.jpg
   at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:712)
   at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:401)

2 个答案:

答案 0 :(得分:0)

FileProvider无法提供您的应用程序无法访问的文件,并且FileProvider无法提供可移动存储中的文件。

此外,如果这些已经在MediaStore中建立了索引,那么您首先不需要FileProvider。使用Uri指向MediaStore中的内容:

  • _ID中获取MediaStore列值
  • 使用ContentUris.withAppendedId()_ID附加到您用来查询Uri的根MediaStore

例如,在this Java class中,给定Cursor指向MediaStore行,我组装了一个Video对象,该对象除其他外还包含一个{{1 }}指向Urioverall sample appVideo中显示视频。

答案 1 :(得分:0)

您可以在 file_paths.xml 中添加此代码:

<root-path
      name="root-path"
      path="" />

然后您就可以访问可移动存储和克隆应用存储。