Almacenamiento en Android LSUB, GYSC, URJC
Todo lo que hay que saber http://developer.android.com/guide/topics/ data/data-storage.html
Dentro de una Aplicación Ya hemos visto, que se puede pasar con el bundle de Extras estado de una Activity a otra
Dentro de una Aplicación En oncreate() y en onpause() se tiene que salvar todo el estado persistente Ojo, onstop() y ondestroy() pueden no llamarse
Dos tipos de estado Documentos: Se deben crear inmediatamente y onpause() dejarlo escrito Estado interno a la aplicación: SharedPreferences, como un bundle, se salva en onpause(), se recrea en oncreate()
Shared Preferences getsharedpreferences(string name, int mode) - name es el fichero de preferencias - mode es un bitmap MODE_PRIVATE=0, con bits: MODE_READABLE, MODE_WRITEABLE, MODE_MULTI_PROCESS Sin parámetros es la por defecto Se puede compartir el fichero entre aplicaciones/threads, por eso hay un sistema transaccional (Editor)
Ejemplo public class CalendarActivity extends Activity {... static final int DAY_VIEW_MODE = 0; static final int WEEK_VIEW_MODE = 1; private SharedPreferences mprefs; private int mcurviewmode; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); SharedPreferences mprefs = getsharedpreferences("myprefs", MODE_PRIVATE); mcurviewmode = mprefs.getint("view_mode", DAY_VIEW_MODE); } protected void onpause() { super.onpause(); } } SharedPreferences.Editor ed = mprefs.edit(); ed.putint("view_mode", mcurviewmode); ed.commit();
Ficheros en Internal Storage Privados a la aplicación (ni el usuario ni otras aplicaciones lo pueden ver) Se borran al desinstalar Similar a la entrada-salida de java
Ejemplo String FILENAME = "hello_file"; String string = "hello world!"; FileOutputStream fos = openfileoutput(filename,context.mode_private); fos.write(string.getbytes()); fos.close();
Ficheros Hay más modos Context.MODE_APPEND, MODE_WORLD_READABLE, MODE_WORLD_WRITABLE (clase Context) Puedo incluir un fichero en res/raw con la aplicación Si quiero crear una cache, getcachedir() me da un File representando al directorio
Ficheros en External Storage Primero hay que comprobar que existe Luego se llama a getexternalfilesdir() si estamos en la version 8, directorio privado getexternalstoragedirectory() en la versión 7 que nos da el raíz común Ojo: getexternalfilesdir() hace más trabajo, en el de abajo hay que preocuparse del directorio
Ficheros en external storage Se usa la clase Environment: - Pedir directorios - Ver el estado, etc.
Ficheros en External Storage boolean mexternalstorageavailable = false; boolean mexternalstoragewriteable = false; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { // Podemos leer y escribir mexternalstorageavailable = mexternalstoragewriteable = true; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // Podemos leer mexternalstorageavailable = true; mexternalstoragewriteable = false; } else { // No podemos ni leer ni escribir (puede estar en varios estados...) } mexternalstorageavailable = mexternalstoragewriteable = false;
Ficheros en External Storage Puedo crear ficheros públicos con getexternalstoragepublicdirectory() que me da un directorio del tipo que pido, ej: Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES); Puedo pedir cache en ext. stg. con getexternalcachedir(), igual que la interna En v7 getexternalstoragedirectory(), crear el de mi paquete, etc.
External Storage: Permisos <uses-permission android:name= "android.permission.write_external_storage" /> <uses-permission android:name= "android.permission.read_external_storage" />
No media Android escanea el external storage Busca fotos/videos/etc para añadirlos a los visores Si se crea un fichero.nomedia, no se añade
SQLite Se pueden crear bases de datos SQLite Heredar de SQLiteOpenHelper y sobreescribir oncreate() y onupgrade() Tutorial excelente en: http://www.vogella.com/articles/androidsqlite/ article.html