从Android 7.0禁止了在应用外部公开file://URL
,如果一项包含文件的URI的intent离开应用,则会抛出FileUriExposeException
异常。
要在应用间共享数据,在7.0及以上系统上要使用FileProviert
类授予content:// URI
临时访问权限。这一改动,主要影响了应用的拍照后照片存储路径的功能。
要使用FileProviert,要在AndroidManifest.xml
清单文件中注册内容提供者,并指向xml下的一个路径,这个路径与拍照时照片存储位置要保持一致,否则就会抛出Failed to find configured root that contains
异常。
下面列出常用xml文件与文件路径path对应关系:
<files-path path="" name="camera_photos" />
对应Context.getFilesDir()
返回的路径,如:/data/data/<application package>/files
<cache-path name="name" path="path" />
对应getCacheDir
返回的路径:/data/data/<application package>/cache
<external-files-path name="name" path="path" />
对应Context.getExternalFilesDir(String)
返回的路径,如:/storage/emulated/0/Android/data/<application package>/files
存放长时间保存的数据,对应设置中清除数据
,应用卸载后会被删除。
<external-cache-path name="name" path="path" />
对应Context.getExternalCacheDir()
返回的路径,如:/storage/emulated/0/Android/data/<application package>/cache
存放临时缓存数据,对应设置中清除缓存
,应用卸载后会被删除。
<external-path name="name" path="path" />
对应Environment.getExternalStorageDirectory
,如:/storage/emulated/0
获取外部存储区根目录下文件,需要读写内存权限,应用卸载后不会被删除。
<root-path path="" name="camera_photos" />
对应外部存储卡,目前已很少使用了。