【发布时间】:2017-03-05 23:19:16
【问题描述】:
在我的应用程序中,我使用相机拍照。然后使用它的Uri 将这张图片加载到ImageView 中,看起来像这样:content://media/external/images/media/12345。我可以通过querying the MediaStore 得到这个Uri 的路径,它看起来像这样:/storage/emulated/0/DCIM/Camera/IMG_12345.jpg。
我现在从上面的路径中手动删除图像。但是当我重新打开应用程序时,图像仍然存在并且可以在相同的Uri 下访问。如果我再次查询MediaStore,它会给我一个CursorIndexOutOfBoundsException。所以文件不存在到MediaStore
那么这里发生了什么?如果我手动删除了该文件,则该应用程序应该无法使用该文件。这个文件现在在哪里?有没有更好的方法来删除图像,以便从任何地方删除它们?
【问题讨论】:
-
如何删除应用程序?您使用的是文件管理器还是使用更新 MediaStore 的应用程序?此外,存储图像的目录是否与某种云存储同步,例如谷歌图片?
-
尝试使用 Gallery 应用程序(也更新 MediaStore)删除图片,看看您的问题是否消失。另外,您没有说,但是文件是否有可能从云存储中刷新?
-
文件管理器无法告诉
MediaStore文件正在被删除。添加文件时,我们可以使用MediaScannerConnection。MediaStore最终会更新其索引,但这可能需要几个小时。 -
“是否保证 MediaStore 会自行处理?” - 它应该。 “或者可以通过某种方式恢复图像?” ——这应该是不可能的。在这种情况下,文件系统是“记录系统”。
MediaStore只是一个索引。打个比方:如果你删除了一个网页,像谷歌这样的搜索引擎仍然会说它存在一段时间,直到它再次爬取那个网站。虽然 Google(可能还有其他搜索引擎)可能会缓存选定的网页,但MediaStore不会,因为这些是电话,而不是服务器群,而且它没有空间。 -
嗯...您确定要重新加载图像吗? “重新打开应用程序”在 Android 中的含义与在 Windows 中的含义不同。除非您终止进程,否则任何内存中的缓存(例如,来自 Picasso 之类的图像加载库)仍然完好无损。
标签: android uri mediastore