在BlackBerry上无法在Micro SD卡上写入

时间:2012-07-04 08:35:17

标签: blackberry filesystems blackberry-eclipse-plugin

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

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可用于写作?

我的开发环境:

  • BlackBerry JDE Eclipse Plugin 1.5.0
  • BlackBerry OS 4.5
  • 带有3G卡的BlackBerry Bold

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

解决了这个问题。当rootsEnum.nextElement().toString();返回“SDCard”时,我正在寻找“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;
}

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