Bienvenidos sean a este post, hoy continuaremos con el post anterior y en este caso nos centraremos en otro tipo de almacenamiento que tendremos disponibles, supongamos que necesitamos crear un archivo el cual no sera especifico para nuestra aplicacion y a su vez no deseamos eliminarlo si desinstalamos la aplicacion para ello ubicaremos a nuestro archivo en un directorio de la memoria externa, veamos a continuacion una tabla con algunos directorios que se crean automaticamente en nuestra memoria externa por medio de Android:

ConstanteCarpetaDescripcion
DIRECTORY_MUSICMusicArchivos de musica
DIRECTORY_PODCASTSPodcastsDescargas de podcast
DIRECTORY_RINGTONESRingtonesTono de llamada de telefono
DIRECTORY_ALARMSAlarmsSonidos de alarmas
DIRECTORY_NOTIFICATIONSNotificationsSonidos de notificaciones
DIRECTORY_PICTURESPicturesArchivos de fotos
DIRECTORY_DOWNLOADSDownloadsDescargas
DIRECTORY_DCIMDCIMDirectorio creado por las camaras

Los directorios de esta tabla se crean en la raiz de nuestra memoria externa, para poder acceder a ellas a partir de la API 8 se puede utilizar el metodo getExternalStoragePublicDirectory para obtener la ruta del directorio compartido, como parametro podemos utilizar alguna de las constantes mostradas en la tabla, organizar los archivos correctamente nos garantiza que el escaner de medios del sistema categorice los archivos de forma adecuada, en caso de usar una API anterior a la version lo mas recomendable es crear estos directorios a mano.

Como dijimos en el post anterior algunos dispositivos pueden tener dos tipos de almacenamiento, uno interno y otro externo, en estos casos al conectar el dispositivo tendremos dos unidades para acceder a los archivos, en el caso de la memoria externa accederemos como siempre, en el caso de la memoria interna solo accederemos a los archivos multimedia de los mismos pero no a los del sistema operativo. Si utilizamos el metodo getExternalFilesDir() (y los relacionados) nos devolvera una de las unidades, en general nos devolvera la unidad interna porque los dispositivos la utilizan como primaria y el resto como secundarias, hasta la version 4.4 de Android, este no soportaba el uso de multiples unidades externas, la misma al montarse dependera del fabricante pero en general esta en:

/mnt/sdcard/external_sd

Para poder trabajar con varias unidades externas a la clase Context se le agrego el metodo File[] getExternalFileDirs(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 getExternalFilesDir(String), la clase Environment incorpora el metodo String getStorageState(File) que nos devuelve el estado de cada unidad de almacenamiento y es similar a getExternalStorageState().

Por ultimo hablaremos sobre como acceder a los archivos en los recursos, es decir adjuntado al lugar donde esta instalado el paquete pero recuerden que no podremos modificarlos, para ello tenemos dos alternativas: res/raw o assets, la principal diferencia entre ambas es la forma de identificar al archivo, para poder acceder deberiamos hacerlo de la siguiente forma:

  • raw, context.getResources.openRawResource(R.raw.nombreArchivo)
  • assets, context.getAssets().open(nombreArchivo)

En el caso de raw recuerden que es solamente el nombre del archivo sin la extension y en el caso de assets deberemos usar el nombre completo del archivo.

En resumen, hoy hemos visto como trabajar de formas alternativas con nuestros archivos, como podemos encontrarnos con otras alternativas y un breve resumen de como se puede trabajar con recursos, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios