2012-07-04 3 views
4

Я пытаюсь сохранить некоторые файлы на micro SDCard. Чтобы проверить доступность SDCard, я использую следующий метод;Не удается записать на микро SDCard на BlackBerry

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

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

Даже если этот метод возвращает истину, когда я пытаюсь сохранить файлы, это дает исключение 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
  • BlackBerry Bold с картой 3G
+0

Вы делаете это при перезагрузке устройства? –

+0

Интересно. Некоторая специальная SD-карта. Можете ли вы создавать файлы с камеры pp или других приложений на вашем устройстве? Является ли эта карта первоначально с этого устройства? –

+0

Не могли бы вы попытаться сохранить файлы в папку камеры? Просто для проверки –

ответ

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

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

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

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

+1

Это действительно полезный фрагмент кода. Но я не получаю доступ к SDCard при запуске устройства. – Mudassir