5

我正在尝试将一些文件保存在 micro SDCard 上。为了检查 SDCard 的可用性,我使用以下方法;

private boolean isSdCardReady() {
    Enumeration e = FileSystemRegistry.listRoots();

    while (e.hasMoreElements()) {
        if (e.nextElement().toString().equalsIgnoreCase("sdcard/")) {    
            return true;
        }
    }
    return false;
}

即使此方法返回 true,当我尝试保存文件时,它也会给出异常net.rim.device.api.io.file.FileIOException: File system is not ready

这是什么意思?如果 SDCard 不可用,那么为什么将其列在FileSystemRegistry.listRoots()

如何确保 SDCard 可用于写入?

我的开发环境:

  • 黑莓 JDE Eclipse 插件 1.5.0
  • 黑莓操作系统 4.5
  • 带有 3G 卡的黑莓 Bold
4

2 回答 2

4
  1. 通常当我尝试在设备重启时访问 SD 卡时出现此错误。您必须推迟应用程序中的所有操作,直到启动完成:

    while (ApplicationManager.getApplicationManager().inStartup()) {
        try {
            Thread.sleep(500);
        } catch (InterruptedException ignored) {
        }
    }
    
  2. 我记得这里提到的另一个可能的原因。您必须在使用后关闭所有流。

于 2012-07-04T08:39:00.690 回答
3

解决了这个问题。我在寻找“sdcard”时rootsEnum.nextElement().toString();返回“SDCard”。是的,它区分大小写。现在,我没有使用硬编码的“SDCard”,而是将上述方法更改为以下方法;

private static String getSdCardRootDir() {
    Enumeration rootsEnum = FileSystemRegistry.listRoots();

    while (rootsEnum.hasMoreElements()) {

        String rootDir = rootsEnum.nextElement().toString();

        if (rootDir.equalsIgnoreCase("sdcard/")) {
            return "file:///" + rootDir;
        }
    }

    return null;
}

使用它,我在其系统定义的情况下获得了根目录。

于 2012-07-16T09:42:49.743 回答