2013-03-08 2 views
1

У меня есть два Android-приложения на рынке, которые читают/записывают с SD-карты. Один из них хранит файл резервной копии на SD-карте. Проблема в том, что с новыми смартфонами есть два sdcards; встроенный в/mnt/sdcard и съемный sdcard, который не имеет стандартизованного пути к каталогу. То, что я надеюсь сделать, это добавить группу переключателей с двумя вариантами для пользователей; хранить резервную копию на внутренней SD-карте (по умолчанию) или хранить на съемной SD-карте. Дилемма получает правильный путь к съемной SD-карте и сохраняет этот путь в переменной.Хранение файлов на съемной SD-карте

Я обнаружил команду linux, которая, похоже, работает на всех устройствах Android. Команда «df» отображает расположение как встроенной SD-карты (/ mnt/sdcard), так и съемной. Я знаю, как отправлять команды с классом dataoutputstream, но там, где я застрял, это чтение с вывода команды и фильтрация только той части, которая мне нужна из результата.

Вот пример того, что вывод команды «ДФ» выглядит следующим образом:

/ $ df 
Filesystem   1K-blocks  Used Available Use% Mounted on 
tmpfs     369128  32 369096 0% /dev 
tmpfs     369128   0 369128 0% /mnt/asec 
tmpfs     369128   0 369128 0% /mnt/obb 
/dev/block/mmcblk0p1 516040 476832  39208 92% /system 
/dev/block/mmcblk0p7 13813852 2948206 10865646 21% /data 
/dev/block/mmcblk0p2 533616  8574 525042 2% /cache 
tmpfs     369128   0 369128 0% /Removable 
/dev/fuse    13813852 2948206 10865646 21% /mnt/sdcard 
/dev/block/vold/179:9 30306304 12222624 18083680 40% /Removable/MicroSD 

выше выход исходит от моего ASUS Transformer таблетки, которые, как вы можете видеть, использует путь/Removable/MicroSD как каталог для съемной SD-карты. Опять же, все, что мне нужно сделать, это захватить этот вывод в моем коде, отфильтровать все ненужные данные и просто сохранить путь в переменной.

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

Любая помощь приветствуется.

+0

я думаю, что это может помочь частный Струнный корень = Environment.getExternalStorageDirectory(). GetPath() + Tags.DIRECTORY_PATH – DjHacktorReborn

+0

спасибо за ответ. К сожалению, класс ExternalStorage предшествует смартфонам с встроенными sdcards и только указывает на/mnt/sdcard. – XSYLUS

ответ

2

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

if (sdCardDir != null) 
     return (new File(sdCardDir, CALLHISTORY_FILE).exists()); 

    ArrayList<File> posibleDir = new ArrayList<File>(); 
    File esd = Environment.getExternalStorageDirectory(); 
    posibleDir.add(new File(esd, "external_sd")); 
    posibleDir.add(esd); 
    posibleDir.add(new File("/sdcard")); 

    // Use first possible sdcard directory 
    for (File dir : posibleDir) { 
     if (dir.exists() && dir.isDirectory()) { 
      sdCardDir = new File(dir, TBACKUP_DIR); 
      if(!sdCardDir.exists()) 
       sdCardDir.mkdir(); 
      return true; 
     } 
    } 

    throw new IOException(); 
} 
+0

Мне все еще не ясно, как это помогает мне. Система всегда предполагает, что встроенная несъемная SD-карта является правильным местом. Если устройство необходимо восстановить, это может привести к тому, что/mnt/sdard будет очищено в процессе, который победит цель резервного копирования. – XSYLUS

+0

Так как есть способ отправить команды, такие как «df» на терминал, должен быть способ прочитать выход обратно в программу, но пока единственный найденный мной метод преобразует вывод в байты и делает его нечитаемым. – XSYLUS

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