我正在开发我的第一个真正的Android应用程序,我遇到了一个用例问题,我似乎找不到最佳实践。应用程序的主屏幕有一个RecyclerView,其中有一个ImageView作为组成单个列表项的视图的一部分。在RecyclerView中点击一个项目将带你到一个带有ViewPager的Activity,该ViewPager给出了所选项目的详细信息,并允许用户滑动显示在RecyclerView中的项目的详细信息。作为添加或编辑项目的工作流程的一部分,用户可以拍摄用于生成RecyclerView缩略图的照片,并在ViewPager的细节片段中显示。我计划为用户提供在社交媒体、电子邮件或他们的Google Photos上分享细节条目(包括图片)的功能。我的难题是图片应该如何存储在用户的设备上。您可以存储到公共外部存储器中,该存储器由媒体扫描仪扫描,用户可以访问该存储器以复制到他们的计算机或共享。
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);
但是,用户也可以删除存储在那里的图片,这给生成缩略图和在细节片段中显示带来了问题。
另一种方法是将图片存储到应用程序的内部存储器中,如下所示:
File file = new File(getExternalFilesDir(null), "DemoFile.jpg");
当然,这将保护图片不被删除。但是,用户将无法从他们的电脑或设备上的其他照片应用程序访问该存储位置。
我可以在两个位置都存储一个副本。然而,这似乎是在浪费设备空间。对于这样的用例,有什么最佳实践吗?其他人是否有过类似的经历,愿意与我们分享?
最好的方法是,通过一个小的。php脚本将用户拍摄的图片上传到服务器,这样可以保证用户不能简单地删除图片并导致应用程序故障,同时仍然让用户能够在他们的设备上拥有图像的本地副本。
您可以在缩略图的文件夹中放置一个空的.nomedia
文件。这将阻止媒体扫描器扫描里面的内容。
也就是说,如果你想让这些缩略图在你的应用程序卸载时自动删除,我认为这是你想要的,你可以在你的外部存储上创建一个私人目录,将绑定到你的特定应用程序。
顺便说一下,在Android中用户是应用程序本身,所以通过将目录设置为私有,您将其设置为应用程序本身私有(而不是设备的实际用户)。但很明显,如果你将这些缩略图保存在可移动存储卡上,或者如果实际用户root了他的设备,这些文件就不是真正的隐私了。