這個主要問題是在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" />
<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