чтение/запись некоторых файлов из внутренней памяти во время выполнения

Я разрабатываю программу, которой нужно читать/записывать некоторые файлы с SD-карты или внутренней памяти во время выполнения. Когда я монтирую SD-карту в своем телефоне, она работает правильно, но если я отключаю SD-карту, мое приложение вызывает некоторую ошибку. Что мне делать с телефонами, у которых нет слота для карт, таких как Htc one x, или с телефонами, в которые не вставлена ​​SD-карта? как я могу писать в память этих телефонов? Я не хочу записывать этот файл в папку /data/data/my.app.package. Я хочу написать где-нибудь, что файлы можно читать из других приложений. сначала я проверяю состояние хранилища с помощью этого кода, и если SD-карта вставлена ​​​​и доступна для записи, у меня нет никаких проблем. но если SD-карта не существует, я действительно не знаю, что мне делать.

string _location;  
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
          _location=Environment.getExternalStorageDirectory()+"/myfolder/";
          Toast.makeText(context, _location, 1000).show();
      }
      else
      {
          _location="/myfolder/"
          Toast.makeText(context, Environment.getExternalStorageDirectory().toString(), 1000).show();

      }

      mysync mys=new mysync(); // Asynctasc that writes some file on _location path
      mys.execute(_location);

Я так смущен и, к сожалению, у меня нет телефона с большой внутренней памятью. пожалуйста, помогите мне.


person aTa    schedule 22.05.2012    source источник
comment
На моем SGS2 Environment.getExternalStorageDirectory() возвращает /mnt/sdcard где смонтировано мое внутреннее хранилище (не SD-карта)   -  person coderplus    schedule 22.05.2012


Ответы (1)


Я разрабатываю программу, которой нужно читать/записывать некоторые файлы с SD-карты или внутренней памяти во время выполнения.

Здесь и в заголовке вашего вопроса вы говорите, что хотите писать во внутреннюю память. Позже вы говорите, что не хотите производить запись во внутреннюю память.

Что он?

Что мне делать с телефонами, у которых нет слота для карт, таких как Htc one x, или с телефонами, в которые не вставлена ​​SD-карта?

Внешнее хранилище != "sdcard". Внешнее хранилище может быть любым, которое захочет производитель устройства, если оно соответствует условиям Документа определения совместимости. Следовательно, внешнее хранилище может быть съемным (например, SD-карта) или нет (например, выделенная часть встроенной флэш-памяти). А в Android 3.0+ внешнее хранилище — это просто специальный подкаталог в том же разделе, где находится внутреннее хранилище.

Вам важно только то, доступно ли внешнее хранилище в настоящее время или нет. Он должен быть доступен почти все время на устройствах Android 3.0+. Он будет недоступен на устройствах Android 1.x и 2.x, если устройство подключено к хост-компьютеру, а хост-компьютер смонтировал внешнее хранилище устройства (например, в виде буквы диска в Windows).

если SD-карта не существует, я действительно не знаю, что мне делать.

Вы просите пользователя отключить свое устройство от хост-компьютера. Или вы решаете писать во внутреннюю память в этих случаях.

person CommonsWare    schedule 22.05.2012
comment
Tanx для вашего объяснения. есть еще один вопрос. если я запускаю программу на некоторых устройствах, таких как htc one x (без SD), что возвращает эту строку кода?: Environment.getStorageDirectory(); спасибо еще раз - person aTa; 23.05.2012
comment
@aTa: возвращает каталог внешнего хранилища, где бы он ни находился на этом устройстве. - person CommonsWare; 23.05.2012