解决异常 android.os.FileUriExposedException

从Android 7.0开始的,不再允许在app中把file:// Uri暴露给其他app,否则应用会抛出FileUriExposedException。原因在于,Google认为使用file:// Uri存在一定的风险。比如,文件是私有的,其他app无法访问该文件,或者其他app没有申请READ_EXTERNAL_STORAGE运行时权限。解决方案是,使用FileProvider生成content:// Uri来替代file:// Uri。

点击打开链接这里是官网文档   www.zhouyi339.com 周易起名 宝宝起名 喜用神起名 免费名字大全

下面是我自己写的配置:

首先在AndroidManifest.xml中配置如下

第一步

 

<!--start 7.0因以后不能暴露file://的uri,所以配置 (在xml文件夹下还有一个文件可对比看)-->
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.kingyon.godplay.fileProvider"//红字是包名,fileProvider固定就可以 下面的必须一样
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>
<!--end-->
第二步

 

新建xml文件 flie_paths.xml       //名字可以随便取  与AndroidManifest.xml下保持一致

<meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/file_paths" />

下面是flie_paths.xml 文件内容  免费名字大全

简单解释下意思:

external-path 这个标签表明是什么路径下(如:external-path指向的是这个路径下Environment.getExternalStorageDirectory().)
 
path 表明文件夹名称,如果为 "."表明所有文件夹;如果为"img" 表明就是Environment.getExternalStorageDirectory().img/  下路径,以此类推
 
name 表明这个路径下的文件名称。如我的配置就是
Environment.getExternalStorageDirectory().path/user_icon //这个文件
这里提一下:external-path 这个标签不是唯一的一个标签、还有很多标签标示不一样的路径,具体可以看上面链接官方给的说明

第三步:(使用)www.zhouyi339.com 周易起名 宝宝起名 喜用神起名 免费名字大全

 

//通过照相机获取图片
private void getBitmapFromCamera(BaseActivity activity) {
    if (activity == null) {
        return;
    }
    Intent intent = new Intent();
    // 判断版本大于等于7.0
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        uri = FileProvider.getUriForFile(activity, "com.kingyon.godplay.fileProvider", USER_ICON);//蓝色的为包名,与配置文件保持一致
        // 给目标应用一个临时授权
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    } else {
        uri = Uri.fromFile(USER_ICON);//就是这句引起的,7.0以后不准这么随意的写咯
    }
    // 下面这句指定调用相机拍照后的照片存储的路径
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
    activity.startActivityForResult(intent, CODE_CAMERA_REQUEST);
}
完毕。ps:注意动态获取权限

www.zhouyi339.com 周易起名 宝宝起名 喜用神起名 免费名字大全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缥缈神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值