As Error:Failed to find configured root that contains /storage/emulated/0/xxx/xxx/xxx.png

發生場景:

引用第三方包,啓動它的拍照功能的時候直接閃退

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章