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
).