我的Android应用在发布时在用户设备的外部存储空间中创建了一个文件夹:
File images = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "rapical" + File.separator);
images.mkdirs();
我有大约16个图像图标(.png),我想在用户第一次打开应用时放在此文件夹中。
这样做的最佳做法是什么?我应该先将它们放在drawable文件夹中,然后将它们复制到新创建的图像文件夹中吗?不知道采取什么方法!
答案 0 :(得分:2)
这里有两个不同的问题:
如何处理用户添加到您应用中的图片?
您的初始图片如何处理您的默认食物?
对用户添加的图像使用external storage有一些含义:
您的应用可以在该图片不再存在的情况下继续存在,因为用户或其他应用可随时删除该文件
您的用户不介意该图片会被其他应用提取,例如照片库
除非您明确希望这些图片可以在您的应用之外进行用户操作,否则我建议您使用internal storage进行"重新调整大小,压缩和存储&# 34;用户提供的图像。原始图片可能位于外部存储空间中(我假设您使用的是ACTION_GET_CONTENT
和/或ACTION_OPEN_DOCUMENT
来获取图片),但您的修改后的副本将专用于您的应用。
我真诚地希望您使用image-loading library,例如Picasso来加载这些图片,因为它们会处理背景线程和ListView
/ RecyclerView
图像等内容回收和给你的东西。
在这种情况下,您在SQLite数据库中存储的默认食物需要是图像加载库可以解释的内容,以引入您想要的图像。
在这种情况下,我建议使用assets/
发送数据库中的图像和file:///android_asset/...
值。 file:///android_asset/
指向项目中的assets/
,因此如果项目中有assets/chicken_pad_thai.jpg
,Picasso(以及任何体面的图像加载库)都能够解释{{1} }}并加载图像。
这使您无需制作图像的重复副本,从而节省了首次启动时的用户磁盘空间和时间。这也意味着如果你更换应用程序中的图像(例如,你得到一张代表鸡垫的更好的照片),用户将开始看到更新的图像,而无需你做一些额外的工作来意识到你发送了一个新的图像,并且必须将该图像复制到某处的文件中。
现在,假设你真的做希望用户提供的图像在外部存储上。在那种情况下:
可能而不是您选择的目录,我会使用file:///android_asset/chicken_pad_thai.jpg
(getExternalFilesDir()
上的方法),与API级别19+一样,您不需要{{1} }作为许可
如果您希望用户能够操作默认食物的图像,请在首次运行时将这些图像复制到该位置