0

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

android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_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 卡或手机内存),并用 shared 中的布尔值控制它喜好。这样,如果用户弹出 SD 卡,内容将被复制到手机内存并从该目录工作。

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

4

3 回答 3

2

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

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

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

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

这里有一个讨论和一个代码示例,用于查找外部 sd 。

于 2012-06-18T07:07:34.840 回答
1

检查这个线程:

android 应用程序如何检测设备中的两个 SD 卡

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

所以像:

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

else { /*handle case where no card is mounted*/}
于 2012-06-18T07:08:45.557 回答
1

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

于 2012-06-18T07:10:36.063 回答