Almacenando externo con varias unidades

Algunos dispositivos incluyen varias unidades de almacenamiento externo. En este caso, al conectar el dispositivo con un cable USB a un ordenador aparecerá más de una unidad:

En estos casos, una unidad suele corresponder a una tarjeta extraible SD y la otra una partición en la memoria flash. Si utilizamos el método getExternalFilesDir(), y los relacionados, nos devolverá una de las unidades. Esta unidad se denomina unidad de almacenamiento primaria y el resto de unidades, secundarias. Es el fabricante quien decide cuál de las unidades es la memoria primaria. Normalmente Samsung escoge como memoria externa primaria la partición flash no extraibe.

  Hasta la versión 4.4 el API de Android no soportaba multiples unidades de memoria externa. Solo podíamos acceder de forma estándar a la memoria externa primaria y para acceder a la memoria externa secundaria es necesario conocer dónde el fabricante ha montado esta memoria. En la mayoría de los casos se monta en /mnt/sdcard/external_sd.

A partir de la versión 4.4 se incorporan varios métodos que nos permiten trabajar con varias unidades externas. En la clase Contextse añade File[] getExternalFilesDirs(String), que nos devuelve un array con la ruta a cada uno de los almacenamientos externos disponibles. El primer elemento ha de coincidir con la ruta devuelta por getExternalFilesDir(String).La clase Envirioment incorpora el método estático String getStorageState(File), que permite conocer el estado de cada unidad de almacenamiento. Nos devuelve una información equivalente a la del método  getExternalStorageState().

Preguntas de repaso: La memoria externa