Uri权限问题&&FileProvider学习

今天用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值