Emmagatzemem diferents tipus de dades
Desem informació en format text
Seguint amb l’app que hem començat en el bloc anterior, la segona cosa que farem serà desar informació addicional que ens sembli rellevant sobre la imatge. Aquesta informació serà en format text que introduirem mitjançant un quadre de text, o alternativament ho podríem fer permetent que el dispositiu reconegui el que li dictéssim mitjançant l’objecte SpeechToText.
En general, quan una App desa fitxers en el mòbil ha de demanar el permís corresponent. En l'inici, doncs, demanarem aquest permís. Treurem també la referència a l'ActivityStarter, que no usarem en aquesta activitat:
Per emmagatzemar informació textual en el dispositiu utilitzem un objecte de tipus File. Aquest objecte ens ofereix les següents funcions:
Les respostes a les crides són asíncrones (les rebem un temps indeterminat després d'haver efectuat la crida) i per tant haurem de programar els esdeveniments per reaccionar-hi adequadament. Disposem dels següents esdeveniments en funció de la crida que haguem fet:
Aquest objecte ens permet emmagatzemar tot el que introduïm en el quadre de text en un arxiu. Desarem l'arxiu en la mateixa carpeta que la foto. Fixeu-vos que el text de la ubicació de l'arxiu conté els següents elements:
- El protocol (file:)
- La ruta (path): un seguit de noms de carpeta separats per una barra inclinada ( / )
- El nom de l'arxiu
- L'extensió de l'arxiu (.jpg)
En aquesta activitat necessitem obtenir el nom i la ruta. Ho farem mitjançant funcions de text com replace o split. La funció replace ens permet eliminar el protocol i l'extensió de l'arxiu. La funció split converteix un text on hi ha elements separats mitjançant un text separador en una llista d'elements. En el text de la ubicació, el nom de l'arxiu és el darrer element de la llista.
Modifiquem l'event Camera1.AfterPicture per obtenir els valors de les dues variables:
Desarem la ruta i el nom mitjançant el component TinyDB. Així, podrem recuperar aquests valors fins i tot quan ja haguem tancat l'app (un cop la reiniciem).
En la pantalla de disseny afegim tres objectes: una etiqueta de text, un quadre de text, un botó i un objecte file tal com mostra la següent imatge per permetre a l’usuari escriure informació sobre la imatge que s’emmagatzemarà en format text mitjançant l’objecte file.
Emmagatzem la informació en format text a la carpeta Pictures (on hi ha la foto) mitjançant el codi associat a l'esdeveniment BDesa.Click tal com segueix:
Desem informació en format àudio
Si volem associar informació d'àudio a la imatge que generem des de l’aplicació, ens caldran uns quants objectes més: el SoundRecorder per gravar una pista d’àudio i el Sound per reproduir el que haguem gravat. A més, a la interfície hi afegirem també un parell de botons per iniciar la gravació i reproduir-la.
Amb aquests nous objectes la interfície queda com segueix:
A diferència de l'objecte file, l'objecte soundrecorder necessita que li facilitem la ruta completa a l'hora d'emmagatzemar l'arxiu d'àudio. L'objecte sound també necessita la ruta completa per poder accedir a l'arxiu. La crida per gravar la fem com mostra la següent imatge:
Aclariments sobre el codi anterior:
- Quan cridem la instrucció Soundrecorder.Start, comença a gravar fins que no li diem que s'aturi cridant Soundrecorder.Stop. Per aquesta raó utilitzem una variable anomenada gravant que ens permet saber si estem gravant o no. Si hem començat la gravació canviarà el text que apareix al botó de Gravar pel d'Aturar. Així per aturar la gravació tornarem a clicar sobre el mateix botó que aturarà la gravació en curs.
- Aquest objecte emmagatzema l’àudio immediatament després de gravar. Per assegurar-nos que això es faci a la ubicació que ens interessa i amb el nom d’arxiu que l’usuari decideixi, l'aplicació exigeix que s’hagi introduït un nom d’arxiu abans de començar a gravar.
Per reproduir l'àudio gravat ens cal l’objecte Sound. Hem d'assignar-li la variable local sound de l'esdeveniment SoundRecorder1.AfterSoundRecorded. Per reproduir l'àudio caldrà fer clic en el botó BReproduir:
Recuperem la informació
Recuperarem la informació que hem desat mitjançant el botó BDesa. En aquest cas programarem el botó per tal que carregui directament les dades en l'app:
Un cop hem acabat la programació de l'app, reiniciem-la (el canvas, el quadre de text i la font de l'àudio estaran buits).
Al prémer el botó Bcerca es carregaran totes les dades al lloc corresponent.