Uri权限问题&&FileProvider学习

来源:互联网 发布:js给div添加点击事件 编辑:程序博客网 时间:2024/06/02 07:27

今天用andriod 7.0的手机运行某个项目时报错:

Caused by: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord

刚看到这个错的时候我很纳闷,因为我在项目开始运行的时候就询问了读写权限并同意了,这里又因为读写权限报错,真是见鬼了。后来耐心的搜了下,发现人家在使用uri的时候都在后面加了下面这句授权代码:

context.grantUriPermission(getPackageName(),uri,Intent.FLAG_GRANT_READ_URI_PERMISSION);

于是我也加了上去,再运行果然好了。猜想Uri的权限比较特殊吧,要使用的时候单独授予。

修改后代码:

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){    uri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".provider", file);    //给Uri授予临时读写权限(BuildConfig.APPLICATION_ID为项目包名)    mContext.grantUriPermission(BuildConfig.APPLICATION_ID,uri,Intent.FLAG_GRANT_READ_URI_PERMISSION);    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);}else{    uri = Uri.fromFile(file);}

===========================================
关于FileProVider的使用步骤:
1、manifest中申明FileProvider
2、res/xml中定义对外暴露的文件夹路径
3、生成content://类型的Uri
4、给Uri授予临时权限
5、使用Intent传递Urihttp:/

FileProVider的使用具体见:http://www.jianshu.com/p/55eae30d133c

原创粉丝点击