按照原来代码,6.0以上申请权限,有了权限调用相机流程在今天测试的同事给我打破了。
同事拿着个7.0的手机来我旁边,一点拍照就崩溃了。当时有点摸不到头脑。
查看log,抛出了FileUriExposedException异常。
查了半天(半年没写android项目了,一直在做Xamarin.iOS的开发),原来7.0之后你的app就算有权限,给出一个URI之后手机也认为你没有权限。
直接贴出最简单的,不用修改以前我们代码的:
在Application的oncreate方法中:
// 置入一个不设防的VmPolicy(不设置的话 7.0以上一调用拍照功能就崩溃了)
// 还有一种方式:manifest中加入provider然后修改intent代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
快速解决,但是后期还是修改成下面FileProvider的方式。
正常的FileProvider配置方式,参考文献:
https://developer.android.com/reference/android/support/v4/content/FileProvider.html