在 Android 文件系统中添加新功能后,我试图解决一个问题,但出现此错误:
android.os.FileUriExposedException: file:///storage/emulated/0/MyApp/Camera_20180105_172234.jpg exposed beyond app through ClipData.Item.getUri()
所以我希望有人能帮我解决这个问题 :)
谢谢
private Uri getTempUri() {
// Create an image file name
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String dt = sdf.format(new Date());
imageFile = null;
imageFile = new File(Environment.getExternalStorageDirectory()
+ "/MyApp/", "Camera_" + dt + ".jpg");
AppLog.Log(
TAG,
"New Camera Image Path:- "
+ Environment.getExternalStorageDirectory()
+ "/MyApp/" + "Camera_" + dt + ".jpg");
File file = new File(Environment.getExternalStorageDirectory() + "/MyApp");
if (!file.exists()) {
file.mkdir();
}
imagePath = Environment.getExternalStorageDirectory() + "/MyApp/"
+ "Camera_" + dt + ".jpg";
imageUri = Uri.fromFile(imageFile);
return imageUri;
}
原文由 JonathanNet 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于 sdk 24 及更高版本,如果您需要获取应用程序存储之外的文件的 Uri,则会出现此错误。
@eranda.del 解决方案可让您更改政策以允许这样做,并且效果很好。
但是,如果您想遵循谷歌指南而不必更改应用程序的 API 策略,则必须使用 FileProvider。
首先要获取文件的 URI,您需要使用 FileProvider.getUriForFile() 方法:
然后你需要在你的 android 清单中配置你的提供者:
(在“authorities”中使用与 getUriForFile() 方法的第二个参数相同的值(应用程序签名 +“.provider”))
最后,您需要创建资源文件:“file_paths”。这个文件需要在 res/xml 目录下创建(你可能也需要创建这个目录):