Sistema de almacenamiento externo

Los teléfonos Android suelen disponer de memoria adicional de almacenamiento, conocido como almacenamiento externo. Este almacenamiento suele ser de mayor capacidad, por lo que resulta ideal para almacenar ficheros de música o vídeo. Suele ser una memoria extraíble, como una tarjeta SD, o una memoria interna no extraíble (algunos modelos incorporan los dos tipos de memoria, es decir, almacenamiento externo extraíble y almacenamiento interno no extraíble). Cuando conectamos el dispositivo Android a través del cable USB permitimos el acceso a esta memoria externa, de forma que los ficheros aquí escritos podrán ser leídos, modificados o borrados por cualquier usuario.

Para acceder a la memoria externa lo habitual es utilizar la ruta /sdcard/…

Esta es la  carpeta es donde el sistema monta la tarjeta SD. No obstante resulta más conveniente utilizar el método Environment.getExternalStorageDirectory() para que el sistema nos indique la ruta exacta.

A partir de la versión 1.6 resulta necesario declarar el permiso  WRITE_EXTERNAL_STORAGE en AndroidManifest.xml  para poder escribir en la memoria externa. En la versión 4.1 aparece el permiso READ_EXTERNAL_STORAGE. Sin embargo, este permiso se ha introducido para un futuro uso. En la actualidad todas las aplicaciones pueden leer en la memoria externa. Por lo tanto, has de tener cuidado con la información que dejas en esta memoria.

  video[Tutorial] Almacenamiento externo en Android

Ejercicio paso a paso: Almacenando puntuaciones en la memoria externa.

1.     Abre el proyecto del ejercicio anterior.

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

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

4.     Abre la nueva clase creada y reemplaza  la inicialización de la variable FICHERO por:

   private static String FICHERO = Environment.        
               getExternalStorageDirectory() + "/puntuaciones.txt";

Dependiendo de si utilizas un emulador o un dispositivo real, el valor de FICHERO será diferente. Posibles valores son: "/sdcard/puntuaciones.txt"o "/storage/sdcard0/puntuaciones.txt".

5.     En el método guardarPuntuacion() reemplaza la inicialización de la variable f por:

FileOutputStream f = new FileOutputStream(FICHERO, true);

6.     En el método listaPuntuacion() reemplaza la inicialización  f por:

FileInputStream f = new FileInputStream(FICHERO);

7.   En el método onCreate() de la actividad Asteroides reemplaza la inicialización de almacen por:

almacen = new AlmacenPuntuacionesFicheroExterno(this);

O si has hecho la práctica Configurar almacenamiento de puntuaciones desde preferencias añade un nuevo tipo en las preferencias.

8.     Abre el fichero AndroidManifest.xml y solicita el permiso WRITE_EXTERNAL_STORAGE

9.     Ejecuta la aplicación y crea nuevas puntuaciones.

10.  Verifica con la vista File Explorer que dentro de la carpeta sdcard aparece el fichero.