Failed to find configured root that contains


這個主要問題是在android系統下7.0

拍照時,Android提供FileProvider類來供應用之間共享數據。

出現這個問題多為xml文件 path 類型和代碼中調用的類型不同導致的

以下為多種各種xml文件和對應path類的關系

<files-path path="" name="camera_photos" />

該方式提供在應用的內部存儲區的文件/子目錄的文件。它對應Context.getFilesDir返回的路徑:eg:"/data/data/com.jph.simple/files"。

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

該方式提供在應用的內部存儲區的緩存子目錄的文件。它對應getCacheDir返回的路徑:eg:“/data/data/com.jph.simple/cache”;

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

該方式提供在外部存儲區域根目錄下的文件。它對應Environment.getExternalStorageDirectory返回的路徑:eg:"/storage/emulated/0";

<external-files-path name="name" path="path" />
該方式提供在應用的外部存儲區根目錄的下的文件。它對應Context#getExternalFilesDir(String) Context.getExternalFilesDir(null)返回的路徑。eg:"/storage/emulated/0/Android/data/com.jph.simple/files"。
<external-cache-path name="name" path="path" />

該方式提供在應用的外部緩存區根目錄的文件。它對應Context.getExternalCacheDir()返回的路徑。eg:"/storage/emulated/0/Android/data/com.jph.simple/cache"

這些就是FileProvider提供的所有支持的path類型

如果使用外部SD卡

則需要設置

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <root-path path="" name="camera_photos" />
    </paths>
</resources>

添加root-path節點

這樣FileProvider就可以使用外部儲存卡了

以上解決了Android高版本file使用的問題,下面還有個問題,就是多個文件夾需求,如何去使用FileProvider

如,我拍照需要文件夾,下載的文件也需要新的文件

那么其實只需要聲明一個FileProvider,然后再xml里再聲明一個paths即可

如下為file_paths.xml文件

<paths>
    <external-path name="takpic_img_path" path="Camera"/>

    <external-path name="apk_file_path" path="APL_DOWNLOAD"/>
</paths>
FileProvider正常聲明為同一個即可
     <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.xxxx.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                tools:replace="android:resource"
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

 

 這樣在調用的時候

 uri=FileProvider.getUriForFile(mContext.getApplicationContext(),"com.xxxx.fileprovider",apkFile);

這樣去獲取Uri即可,多個地方只需要傳不同的file,但是去使用同一個 authorities


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM