Android Uso de almacenamiento externo


Ejemplo

El almacenamiento "externo" es otro tipo de almacenamiento que podemos usar para guardar archivos en el dispositivo del usuario. Tiene algunas diferencias clave con respecto al almacenamiento "interno", a saber:

  • No siempre está disponible. En el caso de un medio extraíble (tarjeta SD), el usuario simplemente puede quitar el almacenamiento.
  • No es privado. El usuario (y otras aplicaciones) tienen acceso a estos archivos.
  • Si el usuario desinstala la aplicación, los archivos que guarde en el directorio recuperado con getExternalFilesDir() se eliminarán.

Para usar almacenamiento externo, primero debemos obtener los permisos adecuados. Necesitará usar:

Para otorgar estos permisos, deberá identificarlos en su AndroidManifest.xml como tal

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

NOTA: ya que son permisos peligrosos si está utilizando el nivel de API 23 o superior, deberá solicitar los permisos en tiempo de ejecución .

Antes de intentar escribir o leer desde el almacenamiento externo, siempre debe verificar que el medio de almacenamiento esté disponible.

String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
    // Available to read and write
}
if (state.equals(Environment.MEDIA_MOUNTED) || 
        state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
    // Available to at least read
}

Al escribir archivos en el almacenamiento externo, debe decidir si el archivo debe ser reconocido como Público o Privado. Si bien ambos tipos de archivos aún son accesibles para el usuario y otras aplicaciones en el dispositivo, existe una distinción clave entre ellos.

Los archivos públicos deben permanecer en el dispositivo cuando el usuario desinstala la aplicación. Un ejemplo de un archivo que debe guardarse como Público sería fotos tomadas a través de su aplicación.

Todos los archivos privados deben eliminarse cuando el usuario desinstala la aplicación. Estos tipos de archivos serían específicos de la aplicación y no serían de utilidad para el usuario u otras aplicaciones. Ex. Archivos temporales descargados / utilizados por su aplicación.

A continuación, se explica cómo obtener acceso al directorio Documents para archivos públicos y privados.

Público

// Access your app's directory in the device's Public documents directory
File docs = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOCUMENTS), "YourAppDirectory");
// Make the directory if it does not yet exist
myDocs.mkdirs();

Privado

// Access your app's Private documents directory
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), 
        "YourAppDirectory");
// Make the directory if it does not yet exist
myDocs.mkdirs();