首次启动时将文件放入新创建的外部存储文件夹中

时间:2016-04-06 15:06:17

标签: android android-external-storage

我的Android应用在发布时在用户设备的外部存储空间中创建了一个文件夹:

File images = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "rapical" + File.separator);
images.mkdirs();

我有大约16个图像图标(.png),我想在用户第一次打开应用时放在此文件夹中。

这样做的最佳做法是什么?我应该先将它们放在drawable文件夹中,然后将它们复制到新创建的图像文件夹中吗?不知道采取什么方法!

1 个答案:

答案 0 :(得分:2)

这里有两个不同的问题:

  1. 如何处理用户添加到您应用中的图片?

  2. 您的初始图片如何处理您的默认食物?

  3. 对用户添加的图像使用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.jpggetExternalFilesDir()上的方法),与API级别19+一样,您不需要{{1} }作为许可

    • 如果您希望用户能够操作默认食物的图像,请在首次运行时将这些图像复制到该位置