您的位置:首页 > 移动开发 > Android开发

Android7.0拍照失败FileUriExposedException异常的解决

2017-06-16 16:20 435 查看
背景:
项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片,然后进行剪裁,最终设为头像或背景。 
而在Android6.0之后,需要动态获取权限,而且Android7.0之后,无法直接根据拍照返回的URI拿到图片,这是因为从安卓7.0开始,直接使用本地真实路径被认为是不安全的,会抛出FileUriExposedExCeption异常,本文就是基于这个功能去针对Android7.0进行操作。 

第一步:Android6.0之前,调用系统拍照,只需要在AndroidManifest.xml声明 
<uses-permission Android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
权限,而在6.0以后,则需要申请权限,先来调用相机拍照。 

第二步:通过FileProvider创建一个content类型的Uri,不仅是通过FileProvider.getUriForFile(Activity.this, “com.ddz.demo”, file);而且在AndroidManifest.xml中进行配置,android:authorities要和FileProvider中一样,同时在xml中配置路径
FileProvider在AndroidManifest.xml中配置如下:
<provider 
android:name="android.support.v4.content.FileProvider” 
android:authorities="com.ddz.demo” 
android:exported="false” 
android:grantUriPermissions="true”>
<meta-data 
android:name="android.support.FILE_PROVIDER_PATHS” 
android:resource="@xml/file_paths" /> 
</provider>
路径配置如下:
<?xml version="1.0" encoding="utf-8”?>
<paths xmlns:android="http://schemas.android.com/apk/res/android”> 
<external-path 
name="my_images" path="images/" />
</paths>

第三步:系统相册选择照片 
系统相册选择照片比较简单,直接调用对应方法: 
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(intent, REQUEST_PICTURE);
剪裁照片 
思路:拿到返回路径之后,,获取图像,并压缩,返回压缩图像进行剪裁 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐