2011-03-12 2 views
0

У меня есть приложение для Android, которое по предпочтению использует внешнее хранилище, если доступно для хранения различных файлов, но будет использовать внутреннюю память, если внешнее хранилище недоступно.Haipad M701 с использованием/nand каталога при запросе внешнего хранилища

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

public class MyApp extends Application { 
    protected static File myFilesDir = null; 
    protected static Helper myHelper = null; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     myHelper = new Helper(this); 
     if (myHelper.CanWriteExtStorage()) { 
      Log.d(TAG, "onCreate() - myHelper.CanWriteExtStorage() returned TRUE"); 
      myFilesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + packageName + "/files"); 
     } 
     else { 
      Log.d(TAG, "onCreate() - myHelper.CanWriteExtStorage() returned FALSE"); 
      myFilesDir = new File(getFilesDir().getAbsolutePath()); 
     } 
     myFilesDir.mkdirs(); 

     if (!myFilesDir.equals(null)) { 
      Log.d(TAG, "onCreate() - myFilesDir: " + myFilesDir.getAbsolutePath()); 
} 

приложение в настоящее время бета-тестирование некоторых людей, которых я нахожусь в непосредственном контакте с и один парень прокомментировал, что он думал, что я должен использовать SD-карту, если она доступна, но он мог видеть из logcat, что приложение использовало /nand/Android/data.... Я спросил, что/nand ссылается, и он сказал, что это внутренняя память на его пэде/планшетном устройстве.

Код класса Helper используется для проверки внешнего хранилища выглядит следующим образом ...

protected boolean CanWriteExtStorage() { 
    boolean mExternalStorageWriteable = false; 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) 
      mExternalStorageWriteable = true; 
    return mExternalStorageWriteable; 
} 

... но соответствующий выход журнала выглядит следующим образом ...

D/com.mycompany.myapp(3844): onCreate() - myHelper.CanWriteExtStorage() returned TRUE 
D/com.mycompant.myapp(3844): onCreate() - myFilesDir: /nand/Android/data/com.company.myapp/files 

Так , возникает вопрос, почему, когда я могу проверить, что внешнее состояние хранилища показывает, что оно установлено, Environment.getExternalStorageDirectory() вернет путь к тому, что кажется внутренним хранилищем?

Должен ли я тестировать что-то кроме Environment.MEDIA_MOUNTED или есть что-то странное об этом устройстве или Android-версии (он работает v2.1).

В конечном итоге это не имеет значения, но я обеспокоен тем, что для некоторых устройств неверна логика.

ответ

1

Прочитайте документацию для Environment.getExternalStorageDirectory()

Примечание: не следует путать слово «внешний» здесь. Этот каталог может лучше считайте медиа/общий хранение. Это файловая система, которая может хранить относительно большой объем данных и является общей для всех приложений (не обеспечивает выполнение разрешений). Традиционно это SD-карта , но она также может быть реализована как встроенное хранилище в устройстве , которое отличается от защищенного внутреннего хранилища и может быть , установленным как файловая система на компьютере. В устройствах с несколькими «внешними» каталогами хранения (например, как безопасного хранения приложений и монтируемым общего хранилища), этот каталог представляет собой «первичное» внешнего хранилище, которое пользователь будет взаимодействовать с .

Я лично не видел случай, но не требуется, чтобы getExternalStorageDirectory вернул карту памяти. Вы делаете правильную вещь, рассматривая возвращенный каталог как разделяемое хранилище, поскольку это было намеренное решение производителя устройства.

+0

Я действительно прочитал, что раньше, но не правильно взял, «также может быть реализован как встроенное хранилище на устройстве, отличном от защищенного внутреннего хранилища» (или не совсем понял). Таким образом, у него есть внутренние, «nand» и SD-карты, и mfrs решил «nand» предпочтительнее SD-карты ... hmmm.Не уверен, что я одобряю их решение, поскольку это вызывает некоторые незначительные проблемы. Спасибо за ответ. – Squonk

+0

@ Mister Я как бы понял, что вам это может не понравиться :) К сожалению, я не смог найти метод для запроса одного типа другого (nand vs. sdcard) –

+0

Я согласен, что, похоже, существуют только те два метода без параметров для выбора. Я собираюсь дать ему пользовательский apk, который будет явно нацелен на SD-карту, которую я знаю. По крайней мере, это поможет объяснить, является ли использование nand корнем проблем, которые у него есть или нет. Еще раз спасибо. – Squonk

Смежные вопросы