開發(fā)當(dāng)中遇到一個(gè)bug提示是這樣的:
Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/999/tencent/MicroMsg/WeiXin/1590028721760.mp4.
at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:739)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:418)
該問題一看就是FileProvider的問題,android7.0以后增加了文件訪問限制,android提供了FileProvider類供應(yīng)用訪問,
我檢查了下自己的配置:
AndroidManifest.xml 文件如下:
<!-- 適配Android 7.0-->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
file_paths.xml 文件如下:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="Android/data/com/hyphenate/chatuidemo/" name="files_root" />
<external-path path="." name="external_storage_root" />
<cache-path name="cache_files" path="."/>
</paths>
其實(shí)已經(jīng)做了相關(guān)的配置,并且其他的機(jī)型沒有出現(xiàn)該問題坷檩,為了防止自己漏配置了路徑,于是我把官方給的路徑都給設(shè)置了下:
<external-path path="." name="external_storage_root" /> <!-- 對(duì)應(yīng)Environment.getExternalStorageDirectory() -->
? ? <cache-path name="cache_files" path="."/> <!-- 對(duì)應(yīng)應(yīng)用程序內(nèi)部存儲(chǔ)區(qū)域的cache子目錄中的文件Context.getCacheDir()? -->
? ? <external-files-path name="external_files" path="."/> <!-- 對(duì)應(yīng)應(yīng)用程序外部存儲(chǔ)區(qū)根目錄中的文件Context.getExternalFilesDir(null)? -->
? ? <external-cache-path name="external_cache_files" path="."/> <!-- 對(duì)應(yīng)應(yīng)用程序外部緩存區(qū)域根目錄中的文件Context.getExternalCacheDir()? -->
? ? <files-path name="path_files" path="."/> <!-- 對(duì)應(yīng)應(yīng)用程序內(nèi)部存儲(chǔ)區(qū)域的子目錄中的文件Context.getFilesDir() -->
? ? <external-media-path name="external_media_path" path="."/><!-- 對(duì)應(yīng)代表應(yīng)用程序外部媒體區(qū)域根目錄中的文件Context.getExternalMediaDirs() -->
結(jié)果運(yùn)行還是報(bào)上面的錯(cuò)誤,最后看了一位大牛的帖子蜀撑,發(fā)現(xiàn)還有一個(gè)隱藏的路徑root-path,我試了下添加:
<root-path path="." name="external_999_root" />? <!-- 對(duì)應(yīng)SD卡? -->
奇跡竟然發(fā)生了剩彬,竟然也解決了我的問題酷麦,/storage/emulated/999/小米應(yīng)用分身而有存儲(chǔ)路徑,猜想應(yīng)該是應(yīng)用分身實(shí)際上給應(yīng)用單獨(dú)開辟了一塊SD卡內(nèi)存的原因喉恋。分享一下希望幫到遇到和我一樣問題的碼友沃饶。
參考帖子:
FileProvider無(wú)法獲取外置SD卡問題解決方案 | Failed to find configured root that contains