Проверка Android на наличие установленной SD-карты всегда возвращает true

#android #storage #android-sdcard #archos

#Android #Хранение #android-sdcard #archos

Вопрос:

Я не уверен, в чем источник проблемы — более старая версия Android с ошибкой или я делаю что-то не так, но моя проблема в том, что независимо от того, что я делаю, Android сообщает, что SD-карта смонтирована. Даже если это физически не в планшете (archos 7o)..

 public boolean saveToDisk(String filename, String header) {
    /* first check to see if the SD card is mounted */
    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //throw some exception so we can display an error message 
        // XXX
        return false;
    }
    try {
        File root = Environment.getExternalStorageDirectory();
        File dir = new File(root.getAbsolutePath()   "/bioz");
        if (!dir.exists()) {
            dir.mkdirs();
        }
        File file = new File(dir, filename);
        ....
  

Первый тест всегда имеет значение true, getExternalStorageDirectory() отвечает /mnt/storage, а проверка на наличие /mnt/storage/bioz указывает, что каталог существует.

Есть идеи, что происходит? Я делаю что-то не так, API сломан или что-то еще?

Спасибо, Реза

Ответ №1:

Внешнее хранилище — это не то же самое, что SD-карта, по крайней мере, не на всех устройствах. Устройства, имеющие внутреннюю флэш-память (например, мой Nexus S), представляют угрозу как «внешнее хранилище».

Теперь устройства, имеющие как внутреннюю флэш-память, так и SD-карту, используют внутреннюю флэш-память в качестве внешней памяти, а SD-карта добавляется в качестве каталога под этой внешней памятью.

С точки зрения программистов это боль, но мы мало что можем с этим поделать.

Комментарии:

1. Мой Acer Iconia (Android 3.2) снова обрабатывает его по-другому, у него есть внутреннее хранилище как / sdcard / и / mnt / sdcard /, но настоящая SD-карта отображается только в /mnt/ external_sd

2. @phalacee: спасибо за информацию. Да, это одна из областей, где SDK является спорным.

3. итак, какова правильная стратегия с точки зрения записи на SD-карту?

4. я запустил телефон и проверил файловую систему, кажется, она отображается как /mnt/storage / sdcard — это очень раздражает. Думаю, решение будет зависеть от конкретного устройства…