Не удается записать на Micro SDCard на BlackBerry

Я пытаюсь сохранить некоторые файлы на микро 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
  • BlackBerry OS 4.5
  • BlackBerry Bold с 3G-картой

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;
}

Используя это, я получил корневой каталог в его системном случае.

  1. Обычно у меня была эта ошибка, когда я пытался получить доступ к SD-карте при перезагрузке устройства. Вы должны отложить все операции в приложении до завершения запуска:

    while (ApplicationManager.getApplicationManager().inStartup()) {
        try {
            Thread.sleep(500);
        } catch (InterruptedException ignored) {
        }
    }
    
  2. Я помню еще одну возможную причину, упомянутую здесь. Вы должны закрыть все потоки после использования.

Другие вопросы по тегам