bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
CiberOT Ciberseguretat en Entorns d'Operació
Tots els mòduls del cicle
android_persistencia

Persistència en dispositius Android

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:

Persistència

Segons Android Data Storage tenim diversos tipus d'emmagatzematge:

  1. Preferències compartides: tipus simples en forma clau-valor.
  2. Emmagatzematge Intern: es guarda arxiu en la memòria interna del dispositiu, no es pot compartir entre aplicacions per seguretat.
    • Els arxius es guarden a /data/data/com.myorg.myapp/files.
  3. Emmagatzematge «Extern» o Compartit: SD card o memòria interna compartida entre aplicacions com la carpeta DCIM on hi ha el carret de fotos.
    • Els arxius es guarden a /data/media/0/Android/data/com.myorg.myapp/files.
  4. BBDD SQLite
  5. Connexió de xarxa (guardar en un servidor d'internet)


Emmagatzematge intern

É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:

  • Context.openFileOutput() ens permet obrir un stream d'escriptura a l'espai privat de l'aplicació.
  • Context.getFilesDir() ens dona el 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.

Exercici

Mini agenda

App de testeig per visualitzar els arxius i les carpetes d'emmagatzematge intern.

  • Crea una nova aplicació amb una interfície que disposi dels camps:
    • Nom
    • Cognoms
    • Telèfon
    • Email
    • Botó GUARDAR
  • Quan premis el botó GUARDAR s'enregistrarà la informació de la interfície en un arxiu de memòria interna.
    • Utilitza la funció Context.openFileOutput() per enregistrar un arxiu amb el nom «contactes.txt».
    • Controla que tingui el seu try…catch i mostra un missatge d'error per si falla alguna cosa.
  • Escriu-hi una línia amb les dades del contacte separats per punts i coma «;».
  • Utilitza el Device File Explorer d'Android Studio per visualitzar l'arxiu que has generat. Pensa a ACTUALTIZAR el File Manager per trobar el teu arxiu.

Ampliació (només si dona temps):

  • Fes una segona Activity que disposi d'un ListView que carregui els contactes en un ArrayList i els visualitzi. Consulta Android ListView.
  • Posa un event d'acció a la ListView per tal que, al clicar un element de la llista, es pugui editar en una Activity a part.


Emmagatzematge compartit

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:

  • Zona de l'aplicació
    • Ubicat a /media/0/Android/data/com.myorg/myapp.
    • Dins d'aquesta hi ha també un seguit de carpetes específiques per a Pictures, Music, etc.
    • Podem accedir a l'arrel i crear les carpetes que creiem necessàries.
    • No requereix permisos d'accés.
  • Zona compartida de MediaStore
    • Ubicat a /media/0/.
    • Hi ha carpetes específiques (fixes) com DCIM, Documents, Downloads, etc.
    • S'hi accedeix mitjançant l'objecte MediaStore però la seva aproximació és molt diferent de la que estem treballant aquí ara.
    • Requereix permisos d'accés READ_EXTERNAL_STORAGE i/o WRITE_EXTERNAL_STORAGE.

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:

Aquí teniu una taula resum dels espais d'emmagatzematge.

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.


Treballant amb XML i altres

És pràctic utilitzar arxius XML per separar els camps de forma llegible. Hi ha diverses llibreries per llegir XML amb Java:

  1. XmlSerializer és una opció.
  2. Aquest article en castellà explica força bé com utilitzar DOM parser.
  3. Potser et pot aclarir tb aquest post de DOM parser


Exercicis

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:

  1. Després d'entrar el nom per enregistrar un rècord, a més, engegarem la càmera.
  2. Capturem la imatge i la enregistrem a disc amb un nom aleatori o seqüencial.
  3. Assignem la imatge al nou item de rècord.
  4. Modifiquem el layout del ArrayAdapter per afegir-hi una ImageView al rècord (on havíem de tenir prèviament el nom i els intents).
  5. Modifiquem adequadament el adapter per aconseguir que ens agafi la imatge de disc i la assigni a la ListView


En el cas que no estiguis desenvolupant l'app «Andrevina» pots fer aquest altre exercici:

  • Implementa una ListView tal i com s'explica a l'article Android ListView.
  • Modifica el layout per tal de que cada list_item tingui també un espai per a la imatge.
  • Afegeix un botó per capturar imatges i enregistrar-les amb diferents noms. Cada cop que enregistris una d'elles, assigna-la al primer element de la llista que no en tingui (al Model de la llista, o sigui, el ArrayList).
  • Actualitza la view de manera que es visualitzin els canvis.
android_persistencia.txt · Darrera modificació: 2023/10/30 15:22 per enric_mieza_sanchez