如何存储Android图片以防止用户删除但仍然允许用户访问

时间:2015-06-02 16:19:25

标签: android file imageview android-camera storage

我正在处理我的第一个真正的Android应用程序,我遇到了一个用例问题,我似乎无法找到最佳实践。该应用程序有一个主屏幕,其中包含一个RecycViewView,它将ImageView作为组成单个列表项的视图的一部分。单击RecyclerView中的项目将转到带有ViewPager的活动,其中提供所选项目的详细信息,并允许用户轻扫RecyclerView中显示的项目的详细信息。作为添加或编辑项目的工作流程的一部分,用户可以拍摄用于生成RecyclerView缩略图的图片,并显示在ViewPager的详细信息片段中。我计划为用户提供在社交媒体或电子邮件或Google照片上分享详细条目(包括图片)的功能。我的困境是图片应该如何存储在用户的设备上。您可以存储到公共外部存储器,该存储器由媒体扫描器扫描,用户可以访问该存储器以复制到他们的计算机或共享。

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);

但是,用户还可以删除存储在那里的图片,这些图片会产生缩略图并显示在细节片段中。

另一种方法是将图片存储到应用程序内部存储器中,如下所示:

File file = new File(getExternalFilesDir(null), "DemoFile.jpg");

当然,这可以保护图片不被删除。但是,用户无法从其计算机或其设备上的其他照片应用访问该存储位置。

我可以在两个地方存储副本。但是,这似乎浪费了设备空间。这样的用例是否有最佳实践?其他人是否有任何他们愿意分享的情景经验?

2 个答案:

答案 0 :(得分:0)

您可以在缩略图的文件夹中放置一个空的.nomedia文件。这样可以防止媒体扫描仪扫描内部的内容。

话虽如此,如果您想在卸载应用时自动删除这些缩略图,我认为这是您想要的,您可以create a private directory on your external storage将其绑定到你的特定应用。

顺便说一句,在Android中,用户就是应用程序本身,因此通过将目录设为私有,您可以将其设置为应用程序本身(而不是设备的实际用户)。但显然,如果您将这些缩略图保存在可移动的SD卡上,或者如果实际用户使用他的设备,那么这些文件将不会真正成为私有。

答案 1 :(得分:0)

最好的方法是,通过一个小的.php脚本上传用户带到服务器的图片,因此保证用户不能简单地删除图片并导致您的应用程序出现故障,同时仍然给出用户能够在其设备上拥有图像的本地副本。