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);
剪裁照片
思路:拿到返回路径之后,,获取图像,并压缩,返回压缩图像进行剪裁
项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片,然后进行剪裁,最终设为头像或背景。
而在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);
剪裁照片
思路:拿到返回路径之后,,获取图像,并压缩,返回压缩图像进行剪裁
相关文章推荐
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
- Android7.0拍照失败FileUriExposedException
- Android7.0拍照失败FileUriExposedException,你的拍照代码升级了吗
- 解决Android7.0相机 android.os.FileUriExposedException
- 升级安装APK兼容Android7.0,解决FileUriExposedException
- Android7.0相机拍照功能导致FileUriExposedException
- android 7.0系统解决拍照的问题android.os.FileUriExposedException:file:///storage/emulated/0/test.txt
- 升级安装APK兼容Android7.0,解决FileUriExposedException
- android 7.0系统解决拍照的问题android.os.FileUriExposedException:
- 解决异常 android.os.FileUriExposedException
- Android7.0解决 android.os.FileUriExposedException: file:///storage/emulated/0/
- Android7.0及以上android.os.FileUriExposedException,解析安装包出现异常
- 解决android.os.FileUriExposedException,exposed beyond app through ClipData.Item.getUri() 异常
- Android7.0打开本地文件失败 android.os.FileUriExposedException
- 升级安装APK兼容Android7.0,解决FileUriExposedException
- Android 升级安装APK兼容Android7.0,解决FileUriExposedException
- 升级安装APK兼容Android7.0,解决FileUriExposedException
- Android 7.0 出现 ”FileUriExposedException“ 和 ”解析包出现错误“ 异常的解决办法
- FileUriExposedException_Android7.0适配