壮心未与年俱老,死去犹能作鬼雄。这篇文章主要讲述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下,拍摄照片报错】参考地址
推荐阅读
- Android命令Monkey压力测试,详解
- android进入adb shell步骤及修改sqlite数据库文件的权限
- Unable to add window -- token android.os.BinderProxy@3a067204 is not valid错误分析记录
- Android系统版本与API等级对应关系表
- Win32 COM组件 x Android Service
- Win32窗口消息机制 x Android消息机制 x 异步执行
- android open source
- 使用SlidingMenu的方法以及Android Studio 如何导入第三方库SlidingMenu
- android中实现欢迎界面的自动跳转