【问题标题】:Cannot Write On Micro SDCard On BlackBerry无法在 BlackBerry 上的 Micro SD 卡上写入
【发布时间】:2012-07-04 08:35:16
【问题描述】:

我正在尝试在 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 可用于写入?

我的开发环境:

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

【问题讨论】:

  • 你在设备重启时这样做吗?
  • 有趣。一些特殊的SD卡。您可以从设备上的相机 pp 或其他应用程序创建文件吗?此卡最初来自此设备吗?
  • 您可以尝试将文件保存到相机文件夹吗?只是为了尝试
  • @EugenMartynov:我认为,我们应该继续删除这些 cmets,以便这篇文章保持干净。
  • 阅读关于关闭流的答案。有帮助吗?

标签: blackberry filesystems blackberry-eclipse-plugin


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

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

【讨论】:

  • 那段代码真的很有用。但我没有在设备启动时访问 SDCard。
【解决方案2】:

解决了这个问题。我在寻找“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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 2012-07-16
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多