在环信集成进行聊天页面拍照的时候,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系统,动态权限这块可别忘了。)

本文针对环信集成中7.0及以上系统拍照时出现的FileUriExposedException问题提供了解决方案。通过修改处理代码,使用ContentResolver和MediaStore来替代Uri.fromFile方法,确保了应用在Android N及更高版本系统的兼容性。

1120

被折叠的 条评论
为什么被折叠?



