Android 7.0下,拍摄照片报错

壮心未与年俱老,死去犹能作鬼雄。这篇文章主要讲述Android 7.0下,拍摄照片报错相关的知识,希望能为你提供帮助。
对于面向 android 7.0 的应用,Android 框架执行的  StrictMode  API 政策禁止在您的应用外部公开  file://  URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现  FileUriExposedException  异常。
要在应用间共享文件,您应发送一项  content://  URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用  FileProvider  类。
 
解决方法:
首先在AndroidManifest.xml的< application> 标签内添加< provider>

< !-- 文件共享 --> < provider android:name="android.support.v4.content.FileProvider" android:authorities="${APPLICATION_ID}.provider" android:exported="false" android:grantUriPermissions="true"> < meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> < /provider>

接下来在res文件夹下创建xml子文件夹(如果已存在,忽略),并新建文件provider_paths.xml
内容如下
< ?xml version="1.0" encoding="utf-8"?> < paths> < external-path path="." name="external_files"/> < /paths>

接下来在跳转时,传入的Uri不再是使用
Uri.fromFile(tmpFile);

而是使用FileProvider的getUriForFile()方法获取
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); tempFile = File.createTempFile("head", null, StorageUtils.getImageDir(context)); Uri imgUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", tempFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); startActivityForResult(intent, REQUEST_TAKE);

 
【Android 7.0下,拍摄照片报错】参考地址

    推荐阅读