【问题标题】:Directory to save files in android?在android中保存文件的目录?
【发布时间】:2012-06-20 03:36:26
【问题描述】:

根据我的应用程序,我正在下载图片和一些数据,我需要将它们保存在手机内存或 sd 卡中的某个位置。由于图片可能很大,我决定将其保存到 SD 卡中。我正在使用下面的代码来确定 SD 卡是否可用。如果是,我正在使用 SD 卡,如果不是,我正在使用手机内存。但问题是,如果我弹出 SD 卡,我的应用程序会在启动时崩溃,并且出现 File Not Found 异常。据我了解,由于手机有内置SD卡,

android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)

总是返回“mounted”。如何理解外置 SD 卡是否真的弹出?

编辑:我尝试检查 SD 卡是否可用,因为我正在使用下面的代码并且我的手机中有内置 SD 卡

android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)

总是返回 true 并且它在没有 SD 卡的情况下创建目录。因此,检查目录是否为 null 无法了解该文件是否存在。下面是我的代码。

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
        cacheDir=new File(context.getExternalFilesDir(null), applicationDirectory + folderName);
    }
    else {
        cacheDir = new File(context.getCacheDir(), applicationDirectory + folderName);
    }
    if(!cacheDir.isDirectory())
        cacheDir.mkdirs();

所以根据我的解决方案,我尝试读取所需的文件,如果我得到 FileNotFoundException,我会在应用程序启动时将所有内容从 assets 文件夹复制到目录(SD 卡或手机内存),并用布尔值控制它共享偏好的价值。这样,如果用户弹出 SD 卡,内容将被复制到手机内存并从该目录工作。

我需要大约 10MB 的缓存空间来保存我的一些文件,并且使用此解决方案(我不确定它是否有效)如果用户运行该应用程序,我的内容将同时保存在 SD 卡和手机内存中当没有 SD 卡时。还有其他解决方案可以找出文件、外部或内部存储器的保存位置吗?感谢您的回答。任何想法将不胜感激。

【问题讨论】:

标签: android android-sdcard


【解决方案1】:

您可以使用这些方法来检查您在外部 sd 上的文件夹是否存在:

if(myFolder != null && myFolder.exists()) { /* work here */ }

myFolder 将是一个针对外部 sd 的文件(您应该检查内部存储器中的供应商映射,因为它们因每个供应商而异)。

遗憾的是,两个 sd 并不是真正的 Android 方式,这导致 Android 认为内部 sd 是外部的。

有一个关于查找外部sd here的讨论和代码示例。

【讨论】:

    【解决方案2】:

    检查此线程:

    How android application detects two SD CARDS in a device

    也许您可以检查 sdcard 的文件夹是否存在,并以不同的方式处理卡不存在的情况?

    比如:

    sdcardloc = /mnt/sdcard/sdcard1;
    if(sdcardloc != null && myFolder.exists()) { /*case where card is mounted*/ }
    
    else { /*handle case where no card is mounted*/}
    

    【讨论】:

      【解决方案3】:

      外置 SD 卡,这个概念是特定于设备供应商的。在 android 只有外部存储概念。还有Environment.getExternalStorageDirectory() 指的是设备制造商认为是“外部存储”的任何东西。

      【讨论】:

      • 如果有 EXTERNAL sd 则不会返回 ;)
      • @Tim Messerschmidt - 对于外部 sd,该概念特定于设备供应商。在 android 中只有 External Storage 概念。
      • 我知道 - 这就是我在你下面的帖子中所写的。 Google 从来没有打算使用 2 个 SD 卡的概念。
      猜你喜欢
      • 2012-09-10
      • 2019-06-21
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多