Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 首次启动时将文件放入新创建的外部存储文件夹_Android_Android External Storage - Fatal编程技术网

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

Android 首次启动时将文件放入新创建的外部存储文件夹,android,android-external-storage,Android,Android External Storage,我的Android应用程序在启动时在用户设备的外部存储上创建一个文件夹: File images = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "rapical" + File.separator); images.mkdirs(); 我有大约16个图像图标(.png),我想在用户第一次打开应用程序时将它们放在这个文件夹中 这

我的Android应用程序在启动时在用户设备的外部存储上创建一个文件夹:

File images = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "rapical" + File.separator);
images.mkdirs();
我有大约16个图像图标(.png),我想在用户第一次打开应用程序时将它们放在这个文件夹中


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

这里有两个不同的问题:

  • 如何处理用户添加到应用程序中的图像

  • 对于您的默认食物,如何处理您的起始图像


  • 为用户添加的图像使用具有一些含义:

    • 由于用户或其他应用程序可以随时删除该文件,因此您的应用程序可以在不再存在的图像中存活

    • 您的用户不介意图像会被其他应用程序(如照片库)拾取

    除非你特别希望这些图像在你的应用程序之外可以由用户操作,否则我建议你使用“重新调整大小、压缩和存储”的用户提供的图像。原始图像可能位于外部存储器上(我假设您正在使用
    ACTION\u GET\u CONTENT
    和/或
    ACTION\u OPEN\u DOCUMENT
    获取图像),但您修改的副本将是应用程序的私有副本


    我真诚地希望您使用,like,来加载这些图像,因为它们将为您处理背景线程和
    ListView
    /
    RecyclerView
    图像回收和其他东西

    在这种情况下,您在SQLite数据库中为默认食品存储的内容需要是图像加载库可以解释的内容,以便输入您想要的图像

    在这种情况下,我建议使用
    assets/
    发送图像和
    file:///android_asset/...
    数据库中的值<代码>file:///android_asset/指向项目中的
    资产
    ,因此如果项目中有
    资产/chicken\u pad\u thai.jpg
    ,毕加索(以及任何像样的图像加载库)将能够解释
    file:///android_asset/chicken_pad_thai.jpg
    )并加载图像

    这样可以避免您复制图像,从而在首次启动时节省用户磁盘空间和时间。这也意味着,如果你替换了应用程序中的图像(例如,你得到了一张更好的代表泰国鸡肉垫的照片),用户将开始看到更新后的图像,而无需你做一些额外的工作来意识到你已经发布了一张新图像,并且必须将该图像复制到某个文件中


    现在,假设您确实希望用户提供的映像位于外部存储器上。在这种情况下:

    • 可能不是您选择的目录,而是使用
      getExternalFilesDir()
      (在
      Context
      上的一种方法),就像在API级别19+上一样,您不需要将
      WRITE\u EXTERNAL\u STORAGE
      作为权限

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


      • 这里有两个不同的问题:

      • 如何处理用户添加到应用程序中的图像

      • 对于您的默认食物,如何处理您的起始图像


      • 为用户添加的图像使用具有一些含义:

        • 由于用户或其他应用程序可以随时删除该文件,因此您的应用程序可以在不再存在的图像中存活

        • 您的用户不介意图像会被其他应用程序(如照片库)拾取

        除非你特别希望这些图像在你的应用程序之外可以由用户操作,否则我建议你使用“重新调整大小、压缩和存储”的用户提供的图像。原始图像可能位于外部存储器上(我假设您正在使用
        ACTION\u GET\u CONTENT
        和/或
        ACTION\u OPEN\u DOCUMENT
        获取图像),但您修改的副本将是应用程序的私有副本


        我真诚地希望您使用,like,来加载这些图像,因为它们将为您处理背景线程和
        ListView
        /
        RecyclerView
        图像回收和其他东西

        在这种情况下,您在SQLite数据库中为默认食品存储的内容需要是图像加载库可以解释的内容,以便输入您想要的图像

        在这种情况下,我建议使用
        assets/
        发送图像和
        file:///android_asset/...
        数据库中的值<代码>file:///android_asset/指向项目中的
        资产
        ,因此如果项目中有
        资产/chicken\u pad\u thai.jpg
        ,毕加索(以及任何像样的图像加载库)将能够解释
        file:///android_asset/chicken_pad_thai.jpg
        )并加载图像

        这样可以避免您复制图像,从而在首次启动时节省用户磁盘空间和时间。这也意味着,如果你替换了应用程序中的图像(例如,你得到了一张更好的代表泰国鸡肉垫的照片),用户将开始看到更新后的图像,而无需你做一些额外的工作来意识到你已经发布了一张新图像,并且必须将该图像复制到某个文件中


        现在,假设您确实希望用户提供的映像位于外部存储器上。在这种情况下:

        • 可能不是您选择的目录,而是使用
          getExternalFilesDir()
          (在
          Context
          上的一种方法),就像在API级别19+上一样,您不需要将
          WRITE\u EXTERNAL\u STORAGE
          作为权限

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

        “我有大约16个图像图标(.png),我希望它们是t