最近,项目又做到,调用摄像头拍照获取图片这个功能。
用以前的代码直接用,发现在Android7.0上使用时会出现问题。
Android6.0之后,动态申请权限已成常态。
调用摄像头拍照获取图片这个功能,需要动态申请 照相机权限、SD卡读写权限。
可是加了这些权限后,还是会报错。
这个是uri暴露错误。
从Android 7.0开始,一个应用提供自身文件给其它应用使用时,如果给出一个file://格式的URI的话,应用会抛出FileUriExposedException。这是由于谷歌认为目标app可能不具有文件权限,会造成潜在的问题。所以让这一行为快速失败。
网上有两种解决方法:FileProvider方式 和 VmPolicy方式。
第一种是是谷歌官方推荐的解决方案,我这里也是采用第一种方法。
步骤:1.在AndroidManifest.xml中添加如下代码
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=""> <application > <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> </application> </manifest>