Almacenando ficheros específicos de tu aplicación en el almacenamiento externo

 

A partir de la versión 2.2 (nivel de API 8), las aplicaciones pueden almacenar los ficheros en una carpeta específica del sistema de almacenamiento externo, de forma que cuando la aplicación sea desinstalada se borren automáticamente estos ficheros. En concreto, esta carpeta ha de seguir esta estructura:

/Android/data/<nombre_del_paquete>/files/

Donde el paquete <nombre_del_paquete> ha de cambiarse por el nombre del paquete de la aplicación, por ejemplo org.example.asteroides.

A partir del nivel de API 8 puedes utilizar el método getExternalFilesDir(null) para obtener esta ruta. Si en lugar de null indicas alguna de las constantes que se indican más abajo, se devolverá la ruta a una carpeta específica según el tipo de contenido que nos interese. Este método crea la carpeta en caso de no existir previamente. Indicando la carpeta garantizamos que el escáner de medios de Android categoriza los ficheros de forma adecuada. Por ejemplo, un tono de llamada será identificado como tal y no como un fichero de música. De esta forma, no aparecerá en la lista de música que puede reproducir el reproductor multimedia. Estas carpetas también son eliminadas cuando se desinstala la aplicación.

Constante

Carpeta

Descripción

DIRECTORY_MUSIC

Music

Ficheros de música

DIRECTORY_PODCASTS

Podcasts

Descargas desde podcast

DIRECTORY_RINGTONES

Ringtones

Tono de llamada de teléfono

DIRECTORY_ALARMS

Alarms

Sonidos de alarma

DIRECTORY_NOTIFICATIONS

Notifications

Sonidos para notificaciones

DIRECTORY_PICTURES

Pictures

Ficheros con fotografías

DIRECTORY_DOWNLOADS

Download

Descargas de cualquier tipo

DIRECTORY_DCIM

DCIM

Carpeta que tradicional-mente crean las cámaras

 

NOTA: Si tu aplicación es creada para una versión inferior a la 2.2, no tendrás acceso al método getExternalFilesDir(). No obstante, puedes almacenar a mano los ficheros en una carpeta con la estructura:

   getExternalStorageDirectory() +
             ”/Android/data/
<nombre_del_paquete>/files/”

Cuando se desinstale tu aplicación, esta carpeta será eliminada si se ha instalado en dispositivos con una versión 2.2 o superior.

Práctica: Almacenando puntuaciones en una carpeta de la aplicación de la memoria externa.

1.     Selecciona el fichero AlmacenPuntuacionesFicheroExterno.java, y cópialo en el portapapeles (Ctrl-C)

2.     Pega el fichero sobre el proyecto (Ctrl-V) y renómbralo como AlmacenPuntuacionesFicheroExtApl.java

3.     Modifica los métodos listaPuntuaciones() y guardarPuntuacion() para que las puntuaciones se almacenen en la memoria externa, pero en una carpeta de tu aplicación. Realiza esta tarea con una versión de SDK para Asteroides inferior a la 2.2. Puedes utilizar el siguiente código para crear el directorio:

File ruta = new File(Environment.getExternalStorageDirectory() +
		     "/Android/data/org.example.asteroides/files/");
if(!ruta.exists()) {
  ruta.mkdirs();
}

4.     Modifica el código correspondiente para que la nueva clase pueda ser seleccionada como almacén de las puntuaciones.

5.     Verifica el resultado ejecutando la aplicación en un terminal o emulador con una versión inferior a la 2.2. Desinstala la aplicación y verifica si el fichero ha sido eliminado.

6.    Ejecutando ahora la aplicación en un terminal con una versión igual o superior a la 2.2. Desinstala la aplicación y verifica si el fichero ha sido eliminado.