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.Teniu la doc oficial d'Android amb exemples de com escriure arxius a l'App Dir.
En Android Studio disposem de l'eina Device File Explorer per visualitzar els arxius de la VM de l'emulador. També permet accedir als arxius d'un dispositiu físic, però amb limitacions.
La trobareu a View → Tool Windows → Device Explorer.
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).