在环信集成进行聊天页面拍照的时候,4.4的机子拍照正常,7.0的机子拍照就出现了问题:fileuriexposedexception
经过相关资料的查询知道这个是7.0Google的变化处理,参考:
Android N 调用相册crash- FileUriExposedException
环信中的处理代码位于:EaseChatFragment类下的selectPicFromCamera方法中:
cameraFile = new File(PathUtil.getInstance().getImagePath(), EMClient.getInstance().getCurrentUser()
+ System.currentTimeMillis() + ".jpg");
//noinspection ResultOfMethodCallIgnored
cameraFile.getParentFile().mkdirs();
startActivityForResult(
new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)),
REQUEST_CODE_CAMERA);
那么处理方法是:
cameraFile = new File(PathUtil.getInstance().getImagePath(), EMClient.getInstance().getCurrentUser()
+ System.currentTimeMillis() + ".jpg");
cameraFile.getParentFile().mkdirs();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues contentValues = new ContentValues(1);
contentValues.put(MediaStore.Images.Media.DATA, cameraFile.getAbsolutePath());
Uri uri = getContext().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CODE_CAMERA);
} else {
startActivityForResult(
new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)),
REQUEST_CODE_CAMERA);
}
直接覆盖环信的以上代码模块即可。(当然,对于6.0及以上的android系统,动态权限这块可别忘了。)