错误提示:android.os.FileUriExposedException: exposed beyond app through Intent.getData()
出现场景:在实现拼图游戏App中选择拍照后图片作为拼图背景时,App闪退报错。
出现原因:从Android7.0系统开始,直接使用本地真实路径的Uri被认为是不安全的,会抛出FileUriExposedException异常。
FileProvider是一种特殊的内容提供器,它使用了和内容提供器类似的机制对数据进行保护,可以选择性的将封装过的Uri共享给外部,从而提高应用的安全性。
解决方法:
前提:点击‘拍照’按钮进行选择拍摄
1、进行一个判断,如果运行设备的系统版本低于Android7.0,就调用Uri的fromrFile()方法将Fileduix对象转化为Uri对象,这个Uri对象标识着output_image.jpg(拍摄到的图片名称)这张图片的本地真实路径。否则,就调用FileProvider的getUriForFile(Context对象,任意唯一的字符串,File对象)方法将File对象转换成一个封装过得Uri对象。
else if (1 == which){
// 系统相机
File outputImage = new File(getExternalCacheDir(), "output_image.jpg");
TE