發生場景:
引用第三方包,啓動它的拍照功能的時候直接閃退
java.lang.IllegalArgumentException: Failed to find configured root that contains
/storage/emulated/0/PictureSelector/CameraImage/PictureSelector_20190704_135543.png
at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:739)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:418)
at com.luck.picture.lib.PictureSelectorActivity.parUri(PictureSelectorActivity.java:444)
at com.luck.picture.lib.PictureSelectorActivity.startOpenCamera(PictureSelectorActivity.java:378)
at com.luck.picture.lib.PictureSelectorActivity.startCamera(PictureSelectorActivity.java:353)
at com.luck.picture.lib.PictureSelectorActivity$10.onNext(PictureSelectorActivity.java:753)
at com.luck.picture.lib.PictureSelectorActivity$10.onNext(PictureSelectorActivity.java:744)
查閱資料發現原來是手機android系統版本有關,自己的手機是Andriod 9.0的,對文件的管理權限有所要求
第一步,指定一個FileProvider。在AndroidManifest.xml中聲明一個條目
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
...>
<provider
android:name=".app.MyFileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"
tools:replace="android:resource" />
</provider>
...
</application>
</manifest>
第二步,需要在項目的res->xml下添加:provider_paths.xml
external-path目錄下指定想分享的目錄,name可以隨意但儘量避免跟上面的一樣,path指定所需目錄
然後在最下面添加如下:
<?xml version="1.0" encoding="utf-8"?>
<paths>
.........
<external-path
name="picture_selector"
path="PictureSelector/" />
</paths>