La persistència en Android és un tema sensible degut al model de seguretat que asseguri la privacitat de les dades de les aplicacions.
Referències:
Segons Android Data Storage tenim diversos tipus d'emmagatzematge:
/data/data/com.myorg.myapp/files./data/media/0/Android/data/com.myorg.myapp/files.
És el més segur ja que no es pot compartir entre aplicacions. La seguretat es manté sempre i quan no es faci root el dispositiu.
L'objecte Context (del qual deriva Activity) ens proveeix algunes funcions per tractar els fitxers:
path de la carpeta privada de l'aplicació on emmagatzemarem els fitxer interns. Amb aquest File com a path podem utilitzar les funcions habituals de Java per tractament d'arxius.Mini agenda
App de testeig per visualitzar els arxius i les carpetes d'emmagatzematge intern.
try…catch i mostra un missatge d'error per si falla alguna cosa.Ampliació (només si dona temps):
Activity que disposi d'un ListView que carregui els contactes en un ArrayList i els visualitzi. Consulta Android ListView.ListView per tal que, al clicar un element de la llista, es pugui editar en una Activity a part.
Si utilitzem aquest espai, guardarem l'arxiu en una carpeta compartida on les diferents aplicacions poden intercanviar informació, com en el carret de fotos (DCIM) o la carpeta de descàrregues (Downloads).
Dins de l'emmagatzematge compartit hi ha 2 zones:
/media/0/Android/data/com.myorg/myapp.MediaStore/media/0/.
En cas d'utilitzar emmagatzematge compartit caldrà declarar al manifest.xml els permisos pertinents:
<manifest ...>
<uses-permission android:maxSdkVersion="18" android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:maxSdkVersion="18" android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
Des de la API 18 en endavant (Android 4.4 KitKat) ja no cal demanar els permisos per escriure en l'àrea externa de la pròpia app, per això apareix aquest maxSdkVersion=18 en els permisos. Només cal tenir en compte que les altres aplicacions també podran accedir a aquestes dades si ho requereixen.
Si volem accedir a les imatges i arxius d'altres apps mitjançant MediaStore caldrà que traiem el maxSdkVersion i demanem els permisos READ_EXTERNAL_STORAGE i WRITE_EXTERNAL_STORAGE.
Als objectes Context i Environment trobem funcions adequades per a accedir als arxius externs de l'app:
path de l'espai compartit dedicat a la nostra aplicació.path de l'espai compartit comú de tots les aplicacions.A totes dues funcions cal especificar-les a quina de les diferents carpetes volem emmagatzemar-ho. Els valors s'indiquen a l'objecte Environment i alguns exemples son: Environment.DIRECTORY_DCIM, Environment.DIRECTORY_MUSIC, Environment.DIRECTORY_SCREENSHOTS, etc.
És pràctic utilitzar arxius XML per separar els camps de forma llegible. Hi ha diverses llibreries per llegir XML amb Java:
Continuació de l'aplicacio «Andrevina» (endevinar el número del 1 al 100) iniciada a l'article Android.
Continuant amb l'aplicació «Andrevina» i la taula de rècords:
ArrayAdapter per afegir-hi una ImageView al rècord (on havíem de tenir prèviament el nom i els intents).ListView
En el cas que no estiguis desenvolupant l'app «Andrevina» pots fer aquest altre exercici:
ListView tal i com s'explica a l'article Android ListView.layout per tal de que cada list_item tingui també un espai per a la imatge.ArrayList).