У меня есть файл в /data/data<package name>/files/settings.dat и я хочу сохранить/скопировать этот файл на SD-карту, файл хорошо читается, но при попытке скопировать его на SD-карту у меня есть исключение: sdacrd не смонтирован. Я добавил нужную строку в androidmanifest.xml и добавил виртуальную SD-карту в эмуляторе. -sdcard /Users/Alaeddine/Documents/workspace/android_sdcard Код:

public void transfer(){
    File sdCard = Environment.getExternalStorageDirectory();
    if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
    {
       Log.d("Carburant", "Sdcard was not mounted !!" ); 
    }
  else
    {
      File nmea_file; 
      File root = Environment.getExternalStorageDirectory();
      FileWriter nmea_writer = null;
      try {
          nmea_file = new File(root,"settings.dat");
          if(!nmea_file.exists()) {
                  Log.w("Carburant", "File Doesn't Exists!");
                  nmea_file.createNewFile();
              }
    copyfile(nom,sdCard.getAbsolutePath() + nmea_file);
      }
      catch (IOException e) 
      {
          Log.w("Carburant", "Unable to write", e);
      } 
      finally 
      {
          if (nmea_writer != null) 
          {
              try 
              {
                  nmea_writer.close();
              } 
              catch (IOException e) 
              {
                  Log.w("Carburant", "Exception closing file", e);
              }
          }
      }
    }

}

Как я могу решить эту проблему ? Спасибо за помощь.

1
androniennn 5 Апр 2011 в 18:57
Вы уверены, что не подключили SD-карту к компьютеру при подключении и забыли размонтировать ее во время работы приложения? Я делаю это иногда и забываю об этом... Редактировать: К сожалению, извините, я не понял, что вы используете эмулятор. Вы можете зайти в настройки эмулятора и убедиться, что SD-карта смонтирована. Если это не сработает, найдите создание и установку виртуальной SD-карты на эмуляторе из командной строки.
 – 
DRiFTy
5 Апр 2011 в 19:00
1
В заголовке вопроса написано «отказано в доступе», но в вашем тексте написано «sdacrd не смонтирован». Можете ли вы точно указать, в чем ошибка, пожалуйста?
 – 
dave.c
5 Апр 2011 в 19:08
@ dave.c: у тебя есть причина, я отредактировал заголовок.
 – 
androniennn
5 Апр 2011 в 19:26
Хорошо, так код выдает исключение или if(!Environment.getExternalStorageState()... возвращает false, и вы получаете Sdcard was not mounted !! в своем журнале?
 – 
dave.c
5 Апр 2011 в 19:34
@ dave.c: второй вариант. он выдает это исключение только тогда, когда проверяет, смонтирована ли SD-карта или нет.
 – 
androniennn
5 Апр 2011 в 19:42

1 ответ

Вы вообще определили SD-карту в эмуляторе? Вам необходимо определить его при создании AVD в приложении AVD manager (но вы можете изменить существующий AVD и добавить SD-карту позже).

В unix вы можете запустить AVD-менеджер через

$ android 

Учитывая, что папка android-sdk/tools находится на вашем пути.

См. также http://developer.android.com/guide/developing/devices/index. .html для этого.

1
Heiko Rupp 5 Апр 2011 в 19:53
Рупп: да, я думаю, эта команда добавляет SD-карту! я проверял в настройках-Хранилище и там указано все недоступно, значит нет sdcard! Итак, как добавить виртуальный?
 – 
androniennn
5 Апр 2011 в 19:24
1
Запустите команду android, чтобы получить список виртуальных устройств и проверить, определена ли для устройства SD-карта. Можно создавать устройства без (или с размером 0).
 – 
Heiko Rupp
5 Апр 2011 в 19:26
Рупп: куда я поместил команды? извините, но я не понимаю вашу идею.
 – 
androniennn
5 Апр 2011 в 19:32
1
Это имелось в виду в оболочке unix -b Я думаю, что внутри Eclipse есть способ запустить этот AVD-менеджер. Или в Windows из Проводника, запустив android-sdk-*\tools\android.exe. Взгляните на developer.android.com/guide/developing/devices/index. html
 – 
Heiko Rupp
5 Апр 2011 в 19:52
Рупп: Да, в папке с инструментами есть файл android.exe. Я выполняю его, и у меня есть окно командной строки! Какую команду поставить, чтобы увидеть, есть ли sdcard?
 – 
androniennn
5 Апр 2011 в 20:10