Almacenamiento

Internal Storage

  • Los archivos guardados son privados para la app
    • Ni el usuario ni las otras aplicaciones pueden acceder.
    • Si desinstalamos la app se borran.
String FILENAME = "hello_file";
String string = "hello world!";

//FOS: Clase que escribe bytes en un archivo.
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
  • Los archivos en tiempo de compilación se guardan en:
    • Carpeta res/raw.
  • Para acceder:
    • R.raw.<filename>

Funciones útiles

  • getFilesDir(): Nos devuelve el path absoluto del directorio donde se guardan nuestros archivos.
     
  • getDir(): Crea o abre (si ya existe) un directorio en nuestro espacio “internal storage”.
     
  • deleteFile(): Elimina un fichero guardado en nuestro espacio de almacenamiento.
     
  • fileList(): Nos devuelve un array con los archivos guardados por nuestra aplicación. 

External storage

  • Tarjeta SD
  • Memoria Externa (propox
<manifest ...>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>
  • Cuidado:
    • Todas las apps y usuarios pueden acceder y eliminar los archivos.
    • Tenemos que comprobar el acceso:
      • Lectura y escritura
      • Lectura sólo
      • null

External storage access

boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {
    // Tenemos acceso al medio, tanto para lectura como escritura
    mExternalStorageAvailable = mExternalStorageWriteable = true;
} 
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    // Solo tenemos acceso de lectura
    mExternalStorageAvailable = true;
    mExternalStorageWriteable = false;
} 
else {
    // Algo no está correctamente, no podemos leer ni escribir en el medio! 
    mExternalStorageAvailable = mExternalStorageWriteable = false;
} 

Crear archivo

void createExternalStoragePrivateFile() {
    // Crea un path que nos indica donde estan los archivos 
    // privados de nuestra aplicación en el medio. 
    File file = new File(getExternalFilesDir(null), "DemoFile.jpg");
    try {  
 
        InputStream is = getResources().openRawResource(R.drawable.balloons);
        OutputStream os = new FileOutputStream(file);
        byte[] data = new byte[is.available()];
        is.read(data);
        os.write(data);
        is.close();
        os.close();
    } catch (IOException e) {
        // Unable to create file, likely because external storage is
        // not currently mounted.
        Log.w("ExternalStorage", "Error de escritura " + file, e);
    }
} 

Ficheros para compartir

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)

 

Music/:

El media Scanner clasifica todo el contenido de esta carpeta como música del usuario.

 

Podcasts/:

El media Scanner clasifica todo el contenido de esta carpeta como podcast.


Ringtones/:

El media Scanner clasifica todo el contenido de esta carpeta como tono de llamada.
 

Ficheros para compartir

Alarms/:

El media Scanner clasifica todo el contenido de esta carpeta como sonidos de alarma.

 

Notifications/: El media Scanner clasifica todo el contenido de esta carpeta como tonos de notificación.
 

Pictures/: Todas las fotos, a excepción de las tomadas por la camera.
 

Movies/: Todas las películas, a excepción de las tomadas por la cámara.0
 

Downloads/: Aquí estarán las descargas. 

Ficheros para compartir

File path = Environment.getExternalStoragePublicDirectory(.DIRECTORY_PICTURES);

File file = new File(path, "DemoPicture.jpg");

Bonus - Internal y external storage

By androidjedi

Bonus - Internal y external storage

  • 425