bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


android_persistencia

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Següent revisió
Revisió prèvia
android_persistencia [2022/10/10 10:38]
enrique_mieza_sanchez creat
android_persistencia [2023/10/30 15:22] (actual)
enric_mieza_sanchez [Exercici] exercici agenda
Línia 6: Línia 6:
   * [[Android]]   * [[Android]]
   * [[model_seguretat_android|Model de seguretat d'Android]]   * [[model_seguretat_android|Model de seguretat d'Android]]
 +
 +{{tag> android #Dam #DamMp08 #DamMp08Uf01 #DamMp08Uf01 }}
  
  
Línia 23: Línia 25:
 É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. É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'[[https://developer.android.com/reference/android/content/Context|objecte Context]] (del qual deriva ''Application'') ens proveeix algunes funcions per tractar els fitxers: +<WRAP info> 
-  * [[https://developer.android.com/reference/android/content/Context#openFileOutput(java.lang.String,%20int)|Context.fileOutputStream]] ens permet obrir un //stream// d'escriptura a l'espai privat de l'aplicació.+L'[[https://developer.android.com/reference/android/content/Context|objecte Context]] (del qual deriva ''Activity'') ens proveeix algunes funcions per tractar els fitxers: 
 +  * [[https://developer.android.com/reference/android/content/Context#openFileOutput(java.lang.String,%20int)|Context.openFileOutput()]] ens permet obrir un //stream// d'escriptura a l'espai privat de l'aplicació.
   * [[https://developer.android.com/reference/android/content/Context#getFilesDir()|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.   * [[https://developer.android.com/reference/android/content/Context#getFilesDir()|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.
 +</WRAP>
  
 +==== Exercici ====
 <WRAP todo> <WRAP todo>
 +**Mini agenda**
 +
 App de testeig per visualitzar els arxius i les carpetes d'emmagatzematge intern. App de testeig per visualitzar els arxius i les carpetes d'emmagatzematge intern.
-  * Crea una nova aplicació amb un botó. +  * Crea una nova aplicació amb una interfície que disposi dels camps: 
-  * Utilitza la funció [[https://developer.android.com/reference/android/content/Context#openFileOutput(java.lang.String,%20int)|Context.fileOutputStream()]] per enregistrar un arxiu amb el nom "dades.txt"+    * Nom 
-  * Escriu-hi una línia de text. +    * Cognoms 
-  * Controla que tingui el seu ''try...catch'' i mostra un missatge d'error per si falla alguna cosa.+    * 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ó [[https://developer.android.com/reference/android/content/Context#openFileOutput(java.lang.String,%20int)|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 [[https://developer.android.com/studio/debug/device-file-explorer|Device File Explorer]] d'Android Studio per visualitzar l'arxiu que has generat. Pensa a ACTUALTIZAR el File Manager per trobar el teu arxiu.   * Utilitza el [[https://developer.android.com/studio/debug/device-file-explorer|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.
 +
 </WRAP> </WRAP>
  
Línia 68: Línia 86:
 </WRAP> </WRAP>
  
 +<WRAP info>
 Als objectes [[https://developer.android.com/reference/android/content/Context|Context]] i [[https://developer.android.com/reference/android/os/Environment|Environment]] trobem funcions adequades per a accedir als arxius externs de l'app: Als objectes [[https://developer.android.com/reference/android/content/Context|Context]] i [[https://developer.android.com/reference/android/os/Environment|Environment]] trobem funcions adequades per a accedir als arxius externs de l'app:
   * [[https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String)|Context.getExternalFilesDir(String type)]] ens dona el ''path'' de l'espai compartit dedicat a la nostra aplicació.   * [[https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String)|Context.getExternalFilesDir(String type)]] ens dona el ''path'' de l'espai compartit dedicat a la nostra aplicació.
   * [[https://developer.android.com/reference/android/os/Environment#getExternalStoragePublicDirectory(java.lang.String)|Environment.getExternalStoragePublicDirectory(String type)]] ens dona el ''path'' de l'espai compartit comú de tots les aplicacions.   * [[https://developer.android.com/reference/android/os/Environment#getExternalStoragePublicDirectory(java.lang.String)|Environment.getExternalStoragePublicDirectory(String type)]] ens dona el ''path'' de l'espai compartit comú de tots les aplicacions.
 +
 +[[https://gist.github.com/granoeste/5574148|Aquí teniu una taula resum dels espais d'emmagatzematge]].
 +</WRAP>
  
 A totes dues funcions cal especificar-les a quina de les diferents carpetes volem emmagatzemar-ho. Els valors s'indiquen a l'objecte [[https://developer.android.com/reference/android/os/Environment#fields|Environment]] i alguns exemples son: Environment.DIRECTORY_DCIM, Environment.DIRECTORY_MUSIC, Environment.DIRECTORY_SCREENSHOTS, etc. A totes dues funcions cal especificar-les a quina de les diferents carpetes volem emmagatzemar-ho. Els valors s'indiquen a l'objecte [[https://developer.android.com/reference/android/os/Environment#fields|Environment]] i alguns exemples son: Environment.DIRECTORY_DCIM, Environment.DIRECTORY_MUSIC, Environment.DIRECTORY_SCREENSHOTS, etc.
  
  
-==== Exercici: fotos full-size a l'àrea externa ===== 
  
-<WRAP todo> 
-Seguirem el [[https://developer.android.com/training/camera/photobasics#TaskPath|tutorial oficial de fotos d'Android a partir de la secció "Save full-size photo"]]. 
- 
-Modifica l'aplicació de l'exercici anterior per aconseguir guardar la foto a //full-size//: 
- 
-  * Fes un //commit// amb //tag// (per després fer una //release//) al [[Git]] abans de continuar. 
-  * Per activar que la càmera faci l'enregistrament //full-size// caldrà que adjuntem la ''Uri'' del fitxer al ''Intent'' mitjançant un ''putExtra'' (fixa't en l'exemple). 
-  * Caldrà utilitzar ''FileProvider'' per autoritzar a l'//app// Camera a utilitzar els arxius de la nostra //app// (sigui a l'àrea externa o interna). 
-  * De moment no facis un nom d'arxiu dinàmic (amb data i hora, com es fa a l'exemple). Un nom fixe ens serveix per aquesta mini-app. 
-  * Per tal que el codi anterior no peti caldrà que comentis o eliminis el què tens a ''onActivityResult'' ja que ja no ens arribarà cap //thumbnail// o miniatura. 
-  * Visualitza el resultat de la foto. Quin problema tenim? 
-</WRAP> 
- 
-<WRAP todo> 
-Ajusta el tamany de la foto a la ''ImageView'' per fer que càpiga dins l'àrea marcada al //layout//. 
- 
-  * Pots seguir les indicacions a la [[https://developer.android.com/training/camera/photobasics#TaskScalePhoto|secció "Decode a scaled image"]] del propi tutorial "photobasics". 
-  * Probablement el codi per ajustar i mostrar la foto et peti si està al ''onCreate''. En primer lloc, perquè el primer cop no hi haurà imatge. El segon cop, petarà perquè durant el ''onCreate'' el valor de l'alçada i amplada del ''ImageView'' és zero. Per solventar-ho, [[https://stackoverflow.com/questions/19271609/imageview-getwidth-returns-0|aquest article proposa la solució]] d'actualitzar la imatge al mètode **''onWindowFocusChanged''** enlloc de fer-ho al ''onCreate'' (tampoc funciona al ''onStart'' ni al ''onResume''). 
-</WRAP> 
  
 \\ \\
android_persistencia.1665398325.txt.gz · Darrera modificació: 2022/10/10 10:38 per enrique_mieza_sanchez