我正在开发处理图片的Android应用程序。
在MainActivity上,您可以选择使用相机或手机中的照片拍照。然后,经过一些处理后,应用程序会显示一个带有一些结果的活动以及Picasso加载的图片:
pic.load(uri).resize(1000, 1000).centerCrop().into(normalImage);
在此过程中,我正在保存我的URI并导致SQLite数据库。 这里的一切都很好。
在应用重新启动时,所有内容都已加载,但是从手机中取出的图片。来自相机的照片还可以。
来自相机的图片具有“file://”类型的URI。来自手机的图片具有“content://”类型的URI。
我不知道我可以发布哪个代码部分来帮助你,不要犹豫告诉我!
谢谢你们。
答案 0 :(得分:2)
在此过程中,我正在保存我的URI并导致SQLite数据库。这里的一切都很好。
不是。
对于您收到的任何Uri
,您应该假设您只能临时访问其内容。对于content:
Uri
值,尤其如此。坚持Uri
毫无意义,因为您将来可能无法使用该值,尤其是在您的流程终止后。
将Uri
视为Web资源的URL。某些URL可公开访问,并且可以保留并稍后使用。只要用户登录,其他URL就可以工作,但是一旦用户的会话超时,URL就没用了。 Uri
值基本相同。
您的选择是:
在Android 4.4及更高版本中,将ACTION_GET_CONTENT
替换为ACTION_OPEN_DOCUMENT
,然后使用takePersistableUriPermission()
尝试获取对Uri
的长期访问权限, the Storage Access Framework
在您的应用中制作内容的本地副本,并对您的UI术语进行适当调整,以便用户了解这是正在发生的事情(例如,“复制”,“附加”,“导入”)
答案 1 :(得分:0)
在开发阶段?如果您使用的是> 6.0版移动设备,那么请添加运行时权限。