1.在manifest配置provider
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="xxx.xxx.FileProvider"//可以随便配置,但必须与后面调用一致即可
android:exported="false"//只限本项目使用权限
android:grantUriPermissions="true">//允许权限
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider" /> //xml文件在res下配置
</provider>
2.在res目录下新建xml文件夹,并建立file_provider.xml文件
```<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external" path="" />//代表的根目录: Environment.getExternalStorageDirectory()
<!-- <files-path name="files" path="tongzhi/" />//代表的根目录: Context.getFilesDir()
<root-path name="root" path="gentledownload/" />//代表设备的根目录new File("/");
<files-path name="files" path="tongzhi/" />//代表的根目录: Context.getFilesDir()
<cache-path name="cache" path="" />//代表的根目录: getCacheDir()
<external-files-path name="external_files" path="" />//>代表的根目录: Context.getExternalFilesDir(String)
<external-cache-path name="external_cache" path="" />//代表的根目录: Context.getExternalCacheDir()-->
</paths>
3.在需要用到uri时候调用
Uri uri = null;
if (Build.VERSION.SDK_INT >= 24) {
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//请求权限
uri = FileProvider.getUriForFile(context, "xxx.xxx.FileProvider", file);
}else {
uri = Uri.fromFile(file);
}
4.有的时候引入第三方的东西可能manifest配置和三方manifest配置有冲突,这时候可以自定义fileprovider
public class MyFileProvider extends FileProvider {//只需要继承即可
}
5.manifest配置
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="xxx.xxx.MyFileProvider"//可以随便配置,但必须与后面调用一致即可
android:exported="false"//只限本项目使用权限
android:grantUriPermissions="true">//允许权限
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider" /> //xml文件在res下配置
</provider>
有什么不足的地方欢迎大家提出来,共同进步!
网友评论