Не удается записать на 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;
}
Используя это, я получил корневой каталог в его системном случае.
Обычно у меня была эта ошибка, когда я пытался получить доступ к SD-карте при перезагрузке устройства. Вы должны отложить все операции в приложении до завершения запуска:
while (ApplicationManager.getApplicationManager().inStartup()) { try { Thread.sleep(500); } catch (InterruptedException ignored) { } }
Я помню еще одну возможную причину, упомянутую здесь. Вы должны закрыть все потоки после использования.