我最近在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)
答案 0 :(得分:0)
FileProvider
无法提供您的应用程序无法访问的文件,并且FileProvider
无法提供可移动存储中的文件。
此外,如果这些已经在MediaStore
中建立了索引,那么您首先不需要FileProvider
。使用Uri
指向MediaStore
中的内容:
_ID
中获取MediaStore
列值ContentUris.withAppendedId()
将_ID
附加到您用来查询Uri
的根MediaStore
例如,在this Java class中,给定Cursor
指向MediaStore
行,我组装了一个Video
对象,该对象除其他外还包含一个{{1 }}指向Uri
。 overall sample app在Video
中显示视频。
答案 1 :(得分:0)
您可以在 file_paths.xml
中添加此代码:
<root-path
name="root-path"
path="" />
然后您就可以访问可移动存储和克隆应用存储。