TEMA 4 1/18 
Cap missatge de text mentre es condueix 
Aquest tema explica el procés del 
desenvolupament de Cap missatge de text mentre 
es condueix, una aplicació que autorespòn als 
missatges de text que rep mentre està conduint. 
És un excel·lent exemple de com App Inventor 
proporciona accés a algunes de les grans 
característiques del telèfon Android, incloent el 
processament de text SMS, gestió de base de 
dades, text a veu, i el sensor d'ubicació. 
L'aplicació que es mostra a la Figura 4-1, respon 
automàticament (i de mans lliures) a qualsevol text amb un missatge del tipus "estic 
conduint ara mateix, et contestaré en breu." 
L'usuari pot canviar la resposta per diferents situacions. Per exemple, si vas a una 
reunió o una pel·lícula en lloc de conduir, la resposta pot ser modificada en 
conseqüència. 
Fins i tot si saps que l'aplicació autorespòn, el sorollet dels textos entrants poden 
matar-te amb curiositat. Aleshores l'aplicació llegeix el text en veu alta. 
El missatge de resposta pot contenir la seva ubicació actual. Si la seva parella està a 
casa preparant el sopar, ell o ella probablement li agradaria saber quant de temps 
més durarà el seu viatge, sense posar en perill en haver de contestar el text. 
Figure 4-1. L'aplicació de Cap missatge de text mentre es condueix
TEMA 4 2/18 
El que aprendràs 
Aquesta és una aplicació més complexa que les dels temes anteriors, de manera 
que haurà de construir una peça de funcionalitat al mateix temps, començant amb 
el missatge de resposta automàtica. Aprendràs sobre: 
• El component Texting per enviar missatges de text i processament de textos 
rebuts. 
• Un formulari d'entrada per enviar el missatge de resposta personalitzat. 
• El component de base de dades TinyDB per guardar el missatge personalitzat 
fins i tot després que l'aplicació es tanca. 
• L'esdeveniment Screen.Initialize per carregar la resposta personalitzada quan 
l'aplicació s'inicia. 
• El component Text-to-Speech per llegir en veu alta els textos. 
• El component LocationSensor per informar de la ubicació actual del 
conductor. 
Introducció 
Perquè aquesta aplicació funcioni, cal un mòdul de text a veu, Text-To-Speech 
Extended, al telèfon. Aquest mòdul està inclòs en Android versió 2 o superior. 
Quan el mòdul Text-To-Speech està instal·lat, obriu-lo per comprovar les seves 
característiques. Quan s'obre, trieu l'idioma per defecte que es desitgi. A 
continuació, seleccioneu "Listen to Preview". Si no se sent res, assegureu-vos que el 
volum del telèfon està activat. També pot canviar la manera com la veu sona en 
canviar el valor de la propietat del motor TTS predeterminada. 
Després d'haver configurat el mòdul Text-To-Speech al teu gust, connectar-se al lloc 
web App Inventor i començar un nou projecte. El nom de 
"CapMissatgeMentreCodueix" (els noms dels projectes no pot tenir espais) i establir 
el títol de la pantalla de "Cap missatge de text mentre es condueix". Obriu l'Editor 
de Blocs i connectar al telèfon.
TEMA 4 3/18 
Disseny dels components 
La interfície d'usuari de l'aplicació és relativament simple: té una etiqueta que 
mostra la resposta automatitzada, una casella de text i un botó per enviar un canvi. 
També hauràs de arrossegar un component Texting, un component TinyDB, un 
component TextToSpeech i un component LocationSensor, tot això es s'afegirà a la 
zona "Non-visible components". Pots veure com això es veurà en la instantània del 
Dissenyador de components que es mostra a la Figura 4-2. 
Figura 4-2. L'aplicació de No missatges de text mentre es condueix en el Dissenyador de components 
Pots construir la interfície d'usuari que es mostra a la Figura 4-2 arrossegant els 
components enumerats en la Taula 4-1. 
Establir les propietats dels components de la següent manera: 
• Establir el text de EtInfo a "El següent text serà enviat de resposta a tots els 
Textos SMS rebuts mentre aquesta aplicació està en marxa. " 
• Establir el text de EtResposta a "Estic conduint ara mateix, em posaré en 
contacte amb tu en breu." Comproveu la seva propietat boldness. 
• Establir el text de TBResposta a "". (Això deixa en blanc el quadre de text per 
a l'entrada de l'usuari.) 
• Ajusteu el Hint (Consell) de TBResposta a "Introduïu text de resposta nova." 
• Establir el text de BModificarResposta a "Modificar la resposta."
TEMA 4 4/18 
Afegir comportaments als Components 
Anem a començar per programar el comportament de resposta automàtica de text 
bàsic, i després, successivament, afegirem més funcionalitat. 
Taula 4-1. Tots els components per a l'aplicació Cap missatge de text mentre es condueix 
Component Grup Nom assignat Objectiu 
Label Basic EtInfo Deixeu que l'usuari sàpiga com funciona l'aplicació. 
Label Basic EtResposta La resposta, que serà enviada de tornada al remitent 
del text original. 
TextBox Basic TBResposta L'usuari haurà d'introduir la resposta aquí. 
Button Basic BModificarResposta L'usuari fa clic ací per enviar la resposta. 
Texting Social Texting1 Processar els textos. 
TinyDB Basic TinyDB1 Emmagatzemar la resposta a la base de dades. 
TextToSpeech Other stuff TextToSpeech1 Llegir en veu alta els textos. 
LocationSensor Sensors LocationSensor1 Saber on està el telèfon.
TEMA 4 5/18 
Programació d'una resposta automàtica 
Per al comportament de resposta automàtica, podràs utilitzar el component Texting 
d'App Inventor. Pots pensar en aquest component com una personeta dins del 
telèfon que sap llegir i escriure textos. Per a la lectura de textos, el component 
proporciona un bloc d'esdeveniments Texting.MessageReceived. Pots arrossegar 
aquest bloc cap a fora i col·locar blocs en el seu interior per mostrar el que ha de 
succeir quan un text és rebut. En el cas d'aquesta aplicació, volem enviar 
automàticament una còpia d'un text escrit prèviament de resposta. 
Per programar el text de la resposta, se li col·loca un bloc Texting1.SendMessage 
dins del bloc Texting1.MessageReceived. Texting1.SendMessage realment envia el 
text, de manera que primer haurà d'indicar al component quin missatge enviar, i a 
qui enviar-lo, abans de cridar a Texting1.SendMessage. La Taula 4-2 enumera tots 
els blocs que necessites per aquest comportament d'autoresposta, i la Figura 4-3 
mostra com s'ha de buscar en l'Editor de blocs. 
Taula 4-2. Els blocs per a l'enviament d'una resposta automàtica 
Tipus de Bloc Calaix Objectiu 
Texting1.MessageReceived Texting El controlador d'esdeveniments que s'activa quan el telèfon 
rep un text. 
set Texting1.PhoneNumber to Texting Indiqueu la propietat PhoneNumber abans d'enviar. 
value number My Definitions El número de telèfon de la persona a qui se li envia el text. 
set Texting1.Message to Texting Indiqueu la propietat Message abans d'enviar missatges. 
EtResposta.Text EtResposta El missatge que l'usuari ha introduït. 
Texting1.SendMessage Texting Envieu el missatge. 
Figura 4-3. En resposta a un text entrant
TEMA 4 6/18 
Com funcionen els blocs 
Quan el telèfon rep un missatge de text, l'esdeveniment Texting1.MessageReceived 
es dispara. Com es mostra a la Figura 4-3, el número de telèfon del remitent està en 
l'argument number, i el missatge rebut és l'argument MessageText. Per a la 
resposta automàtica, l'aplicació ha d'enviar un missatge de text al remitent. Per 
enviar el text, primer ha de configurar les dues propietats fonamentals del 
component de missatges de text: PhoneNumber i Message.Texting. PhoneNumber 
s'estableix al número del remitent i Texting.Message s'estableix en el text que va 
escriure en EtResposta: "estic conduint ara mateix, et contestaré en breu". Quan 
s'estableix, l'aplicació crida a Texting.SendMessage per enviar realment la resposta. 
Estaràs preguntant-te sobre els quadres de color groc que tenim en l'Editor de Blocs. 
Aquests són comentaris, i es poden afegir fent clic en el botó dret en un bloc i 
seleccionant Afegir comentari. Un cop afegit un comentari, pot mostrar o amagar 
fent clic al signe d'interrogació negre que apareix. No ha de afegir comentaris al 
app, simplement hem inclòs aquí per ajudar a descriure cada bloc i el que fa. 
La majoria de la gent fa servir els comentaris per documentar la manera com esta 
construïda la seva aplicació o comentaris per a explicar com funciona el programa, 
però no faran que l'aplicació es comporta de manera diferent. Els comentaris són 
important, com vas fer l'aplicació i si la vols modificar més tard, i per a altres 
persones que puguin personalitzar-la. L'única cosa que tots estan d'acord sobre el 
programari és que canvia i es transforma sovint. Per això, comentar el codi és molt 
important en l'enginyeria de programari, i especialment amb el programari de codi 
obert com App Inventor. 
Posa a prova la teva app. Necessitaràs un segon telèfon per provar 
aquest comportament. Des del segon telèfon, enviar un text al telèfon 
que executa l'aplicació. El segon telèfon rebra el text de la resposta?
TEMA 4 7/18 
Introducció d'una resposta personalitzada 
A continuació, anem a afegir blocs de manera que l'usuari pot introduir la seva 
resposta personalitzada. En el Dissenyador de components, ha afegit un component 
TextBox denominat TBResposta, que és on l'usuari introduirà la resposta 
personalitzada. Quan l'usuari fa clic al BModificarResposta, ha de copiar l'entrada 
(TBResposta) al EtResposta, que s'utilitza per respondre als textos. La Taula 4-3 
enumera els blocs que necessites per transferir una resposta que acaba d'introduir 
en el EtResposta. 
Taula 4-3. Blocs per mostrar la resposta personalitzada 
Tipus de Bloc Calaix Propòssit 
BModificarResposta BModificarResposta L'usuari fa clic en aquest botó per enviar un nou missatge 
de resposta. 
set EtResposta.Text to EtResposta Moure el valor d'entrada recent i l'origen. 
TBResposta.Text TBResposta L'usuari ha introduit la nova resposta aquí. 
Com funcionen els blocs 
Penseu en com funciona una forma d'entrada típica: primer entra alguna cosa en un 
quadre de text i, a continuació, feu clic a un botó d'enviar per indicar al sistema per 
processar-la. El formulari d'entrada per a aquesta aplicació no és diferent. La figura 
4-4 mostra com els blocs es programen de manera que quan l'usuari fa clic al 
BModificarResposta, l'esdeveniment BModificarResposta.Click es dispara. 
Figura 4-4. Ajust de la resposta a l'entrada d'usuari 
El controlador d'esdeveniments en aquest cas còpia (o sets, en termes de 
programació) el que l'usuari ha introduït en TBResposta al EtResposta. Recordem 
que EtResposta conté el missatge que s'enviarà a la resposta automàtica, de 
manera que has de col·locar el missatge personalitzat que acaba d'introduir allà. 
Posa a prova la teva app. Escriviu una resposta personalitzada i 
presentar-la, i aleshores utilitzar el segon telèfon per enviar un altre 
text al telèfon que executa l'aplicació. Ha enviat la resposta 
personalitzada?
TEMA 4 8/18 
Emmagatzematge de la resposta personalitzat en 
una base de dades 
Has construït una gran aplicació ja, amb una condició: si l'usuari introdueix una 
resposta personalitzada i, a continuació, tanca l'aplicació i rellança ella, la resposta 
personalitzat no apareixen (en canvi, l'opció per defecte ho farà). Aquest 
comportament no és el que els usuaris esperen, voldran veure la resposta 
personalitzada quan es reiniciï l'aplicació. Perquè això passi, cal emmagatzemar 
aquesta resposta personalitzada persistentment. 
Es podria pensar que les dades ficades a la propietat EtResposta.Text estan 
tècnicament "emmagatzemades", però el problema és que les dades 
emmagatzemades en les propietats del component són dades transitòries. Dades 
transitòries són com la teua memòria a curt termini, i el telèfon "oblida" tan prompte 
com una aplicació es tanca. Si desitges que la teua aplicació recorde alguna cosa 
persistent, cal passar de memòria a curt termini (una propietat del component o 
variable) a la memòria a llarg termini (base de dades). 
Per emmagatzemar dades de manera constant, s'utilitzarà el component TinyDB, 
que emmagatzema les dades en una base de dades del dispositiu Android. TinyDB 
proporciona dues funcions: StoreValue i GetValue. La primera permet l'aplicació per 
emmagatzemar informació a la base de dades del dispositiu, mentre que el segon 
permet extraure la informació de l'aplicació que ja ha estat emmagatzemat. 
Per a moltes de les aplicacions, utilitzarà el següent esquema: 
1. Emmagatzemar les dades de la base de dades cada vegada que l'usuari envia 
un nou valor. 
2. Quan l'aplicació s'inicia, carrega les dades de la base de dades en una 
variable o propietat. 
Anem a començar per modificar el controlador d'esdeveniments 
BModificarResposta.Click perquè emmagatzeme les dades de forma constant, usant 
els blocs que figuren a la Taula 4-4. 
Taula 4-4. Blocs per emmagatzemar la resposta personalitzada amb TinyDB 
Tipus de Bloc Calaix Propòssit 
TinyDB1.StoreValue TinyDB1 Deseu el missatge personalitzat a la base de dades del telèfon. 
text ("EtResposta") Text Feu-la servir com l'etiqueta per a les dades. 
EtResposta.Text EtResposta El missatge de resposta ja és aquí.
TEMA 4 9/18 
Com funcionen els blocs 
Aquesta aplicació utilitza TinyDB per a prendre el text que acaba de posar en 
EtResposta i emmagatzemar a la base de dades. Com es mostra a la Figura 4-5, 
quan hagi de guardar alguna cosa a la base de dades, es proporciona una etiqueta 
amb ella, en aquest cas, l'etiqueta és "EtResposta". Penseu en l'etiqueta com el nom 
del lloc de les dades en la base de dades, que identifica de forma exclusiva les 
dades que s'emmagatzemen. Com veurem en la següent secció, farem servir la 
mateixa etiqueta ("EtResposta") en carregar les dades de nou a la base de dades. 
Figura 4-5. Emmagatzematge de la resposta personalitzada persistentment
TEMA 4 10/18 
Recuperació de la resposta personalitzat quan 
l'aplicació obre 
La raó per a l'emmagatzematge de la resposta personalitzada a la base de dades és 
el que es pot tornar a carregar en l'aplicació a la següent vegada que l'usuari l'obre. 
App Inventor proporciona un bloc d'esdeveniment especial que s'activa quan 
l'aplicació s'obre: Screen1.Initialize (si van completar TalpBarrejat al tema 3, ja ha 
vist això). Si arrossega el bloc d'esdeveniments i col·loca els blocs en aquest, els 
blocs s'executaran just quan l'aplicació s'inicia. 
Per aquesta aplicació, el controlador d'esdeveniments Screen1.Initialize ha de 
comprovar per veure si una resposta personalitzada s'ha posat a la base de dades. 
Si és així, la resposta personalitzada ha de ser carregada en l'ús de la funció 
TinyDB.GetValue. Els blocs que necessites per això es mostra a la Taula 4-5. 
Taula 4-5. Blocs per carregar les dades de nou en tant l'aplicació s'obre 
Tipus de Bloc Calaix Objectiu 
def variable ("resposta") Definition (No s'oblide: no 
és el mateix que el calaix 
de My Definitions) 
Una variable temporal per emmagatzemar les dades 
recuperades. 
text ("") Text El valor inicial de la variable pot ser qualsevol cosa. 
Screen1.Initialize Screen1 Això es produeix quan l'aplicació s'inicia. 
set global resposta to My Definitions Estableixi aquesta variable en el valor recuperat de la base 
de dades. 
TinyDB1.GetValue TinyDB1 Obtenir el text de resposta emmagatzemat a la base de 
dades. 
text ("EtResposta") Text Connectar-lo a la ranura de l'etiqueta de TinyDB.GetValue, 
assegurant-se que el text és el mateix que l'utilitzat en valor 
TinyDB.Store anterior. 
if Control Pregunti si el valor recuperat té una mica de text 
> Math Comprovar si la longitud del valor recuperat és major que 0. 
length text Text Comprovar si la longitud del valor recuperat és major que 0. 
global resposta My Definitions Aquesta variable conté el valor recuperat de 
TinyDB1.GetValue. 
number (0) Math Compareu això amb la longitud de la resposta. 
set EtResposta.Text to EtResposta Si hem recuperat alguna cosa, poseu-la en EtResposta. 
global resposta My Definitions Aquesta variable conté el valor recuperat de 
TinyDB1.GetValue.
TEMA 4 11/18 
Com funcionen els blocs 
Els blocs es mostra a la Figura 4-6. Per entendre'ls, cal preveure un usuari que obre 
l'aplicació per primera vegada, entrant en una resposta personalitzada, i obrir 
l'aplicació altres vegades posteriorment. La primera vegada que l'usuari obre 
l'aplicació, no hi haurà cap resposta personalitzada a la base de dades per carregar, 
de manera que desitja deixar la resposta per defecte al EtResposta. En els 
llançaments successius, que vol carregar la resposta personalitzada prèviament 
emmagatzemada a la base de dades i el col·loca al EtResposta. 
Figura 4-6. Càrrega de la resposta personalitzada de la base de dades durant la inicialització aplicació 
Quan l'aplicació s'inicia, l'esdeveniment Screen1.Initialize es dispara. L'aplicació 
crida a la TinyDB1.GetValue amb una etiqueta de "EtResposta", la mateixa etiqueta 
que va usar quan s'emmagatzema l'entrada de l'usuari de resposta personalitzada 
abans. El valor recuperat es col·loca en la resposta variable de manera que es pot 
comprovar abans que es col·loqui com el EtResposta. Pots pensar en per què 
t'agradaria comprovar el que rep de la base de dades abans de mostrar com el 
missatge personalitzat per a l'usuari? 
TinyDB torna text buit si no hi ha dades d'una etiqueta en particular a la base de 
dades. No hi haurà dades el primer cop que es llança l'aplicació, el que serà el cas 
fins que l'usuari introdueix una resposta personalitzada. Com que la variable de 
resposta té ara el valor retornat, es pot utilitzar el bloc per comprovar si la longitud 
del que ha estat rebut de la base de dades és més gran que 0. Si la longitud del 
valor contingut en resposta és més gran que 0, l'aplicació sap que TinyDB va fer 
alguna cosa a canvi, i el valor recuperat es pot col·locar en la EtResposta. Si la 
longitud no és més gran que 0, l'aplicació sap que no hi ha resposta 
emmagatzemada prèviament, de manera que no modifica el EtResposta (deixant la 
resposta per defecte). 
Posa a prova la teva app. No es pot provar aquest comportament a 
través de les proves en viu, ja que la base de dades es buida cada 
vegada que "Connect to Device" per reiniciar l'aplicació. 
En el seu lloc, seleccioneu “Package for Phone”→ Show Barcode i, a continuació, 
descarrega l'aplicació al teu telèfon mitjançant l'escaneig del codi de barres. Una 
vegada que l'aplicació està instal·lada, introduïu un missatge de resposta al nou 
TBResposta i feu clic al BModificarResposta. A continuació, tancar l'aplicació i torni a 
iniciar-lo. El seu missatge personalitzat apareix?
TEMA 4 12/18 
Llegint en veu alta els textos entrants 
En aquesta secció, podràs modificar l'aplicació perquè quan rebi un text, un número 
de telèfon del remitent, juntament amb el missatge, es llig en veu alta. La idea és 
que quan vas en cotxe i escoltes un soroll d'un missatge de text entrar, Pots tenir la 
temptació de revisar el text, encara que coneix l'aplicació que envia una resposta 
automàtica. Amb text-to-speech, es pot sentir els textos entrants i mantindre les 
mans al volant. 
Els dispositius Android proporcionen capacitats de text-to-speech (text a veu) i App 
Inventor proporciona un component, TextToSpeech, que llegirà tot text que li donis. 
(Tingueu en compte que aquí "text" s'entén en el sentit general de la paraula, una 
seqüència de lletres, dígits i puntuació; no un text SMS.) 
A la "Introducció" d'aquesta aplicació, li demana que descarregui un mòdul de ext-to- 
speech des del Android Market. Si no ho va fer llavors, hauràs de fer-ho ara. Quan 
el mòdul està instal·lat i configurat com desitja, pot utilitzar el component 
TextToSpeech dins App Inventor. 
El component TextToSpeech és molt fàcil d'utilitzar: només cal cridar a la seva 
funció de parla i connecti el text que desitgi parlat en la seva ranura missatge. Per 
exemple, la funció que es mostra a la Figura 4-7 deia: "Hola Món". 
Figura 4-7. Blocs per parlar "Hola Món" en veu alta 
Per a l'aplicació Cap missatge de text mentre condueix, hauràs de donar un 
missatge més complicat que se'ls parli, que inclou tant el text rebut i el número de 
telèfon de la persona que el va enviar. En lloc de connectar un objecte de text 
estàtic com el bloc de text "Hola Món", se li connecta un bloc make text. Una funció 
molt útil, fer que el text li permet combinar peces separades de text (o els números i 
altres caràcters) en un objecte de text únic. 
Hauràs de fer la crida a TextToSpeech.Speak al controlador d'esdeveniments 
Texting.MessageReceived programat anteriorment. Els blocs programats prèviament 
controlen aquest esdeveniment establint les propietats PhoneNumber i Missatge del 
component de missatges de text de manera adequada i després enviar el text de la 
resposta. Vas a estendre aquest controlador d'esdeveniments mitjançant l'addició 
dels elements que figuren a la Taula 4-6. 
Taula 4-6. Blocs per parlar en veu alta el text entrant 
Tipus de Bloc Calaix Objectiu 
TextToSpeech1.Speak TextToSpeech1 Digueu el missatge rebut en veu alta. 
make text Text Construir les paraules que es parlen. 
text ("SMS text received from") Text Les primeres paraules parlades. 
value number My Definitions El nombre del qual es va rebre el text original. 
text (".The message is") Text Posi un període després que el número de telèfon i dir després: 
"El missatge és". 
value messageText My Definitions El missatge original rebut.
TEMA 4 13/18 
Com funcionen els blocs 
Després que s'envia la resposta, la funció TextToSpeech1.Speak es cridada, tal com 
es mostra a la part inferior de la Figura 4-8. Pots connectar qualsevol objecte de text 
a la ranura missatge de la funció TextToSpeech1.Speak. En aquest cas, make text 
s'utilitza per construir les paraules que se'ls parli, que concatena (o afegeix), amb el 
text "text SMS rebut" i el número de telèfon des del qual es va rebre el missatge 
(value number), més el text ". El missatge és, " i finalment el missatge rebut (value 
MessageText). Per tant, si el text "hola" va ser enviat des del número "111-2222", el 
telèfon podria dir, "va rebre text SMS 111-2222. El missatge és hola ". 
Figura 4-8. Llegint en veu alta el text entrant 
Posa a prova la teva app. Necessitaràs un segon telèfon per provar 
l'aplicació. Des del segon telèfon, enviar un text al telèfon que executa 
l'aplicació. El telèfon que executa l'aplicació llegeixi el text en veu 
alta? Encara envia una resposta automàtica?
TEMA 4 14/18 
Afegir informació d'ubicació a la resposta 
Aplicacions com Place de Facebook i Latitude de Google utilitzen informació GPS per 
ajudar a la gent a fer un seguiment de la seua ubicació. Hi ha greus problemes de 
privacitat amb aplicacions d'aquest tipus, entre altres raons perquè el seguiment de 
localització de la gent pot semblar un "Gran Germà" en el que l'aparell d'un govern 
totalitari pot configurar per rastrejar el parador dels seus ciutadans. No obstant això, 
les aplicacions que utilitzen la informació d'ubicació pot ser molt útil si pensem en 
un nen perdut, o excursionistes que s'han perdut. 
En l'aplicació Cap missatge mentre es condueix, el seguiment de la ubicació es pot 
utilitzar per transmetre una mica més informació en resposta als textos entrants. En 
comptes de "estic conduint", el missatge de resposta pot ser alguna cosa com "estic 
conduint i estic en el carrer Sant Joan de Xàtiva." Per algú esperant l'arribada d'un 
amic o membre de la família, aquesta informació addicional pot ser útil . 
App Inventor proporciona el component LocationSensor per la interfície amb el GPS 
del telèfon (o sistema de posicionament geogràfic). A més de latitud i longitud, el 
LocationSensor també poden accedir a Google Maps per proporcionar l'adreça actual 
del conductor. 
És important assenyalar que LocationSensor no sempre té una lectura. Per això, cal 
anar amb compte en utilitzar el component correctament. En concret, la seva 
aplicació ha de respondre al controlador d'esdeveniments 
LocationSensor.LocationChanged. Un esdeveniment LocationChanged es produeix 
quan el sensor de localització del telèfon rep una primera lectura, i quan el telèfon 
es mou per generar una nova lectura. Ús dels blocs indicats a la Taula 4-7, el nostre 
esquema respondrà a l'esdeveniment LocationChanged col·locant l'adreça actual en 
una variable que anem a nomenar UltimLloc. Més tard, anem a canviar el missatge 
de resposta per incorporar l'adreça que obtenim d'aquesta variable. 
Taula 4-7. Blocs per configurar el sensor de localització 
Tipus de Bloc Calaix Objectiu 
def variable ("UltimLloc") Definitions Creeu una variable per contenir l'adreça última lectura. 
text ("Desconeguda") Text Establir el valor predeterminat en cas sensor del telèfon no 
està funcionant. 
LocationSensor1.LocationChanged LocationSensor1Això es va desencadenar a la lectura primera ubicació i cada 
canvi d'ubicació. 
set global UltimLloc to My Definitions Establiu aquesta variable que s'utilitzarà posteriorment. 
LocationSensor1.CurrentAddress LocationSensor1Aquesta és una adreça del carrer com "Carrer Willard 2222, 
Atlanta, Geòrgia."
TEMA 4 15/18 
Com funcionen els blocs 
L'esdeveniment LocationSensor1.LocationChanged es dispara la primera vegada que 
el sensor rep una lectura d'ubicació i quan el dispositiu es mou de manera que una 
nova lectura es genera. Com que es molt probable que voleu enviar una adreça com 
a part del missatge de resposta, la Figura 4-9 mostra com la funció 
LocationSensor1.CurrentAddress es cridada per obtenir aquesta informació i 
emmagatzemar-la en la variable UltimLloc. Entre bastidors, aquesta funció fa una 
crida a Google Maps (a través d'una API) per determinar l'adreça de carrer més 
propera per la latitud i longitud que el sensor llegeix. 
Figura 4-9. Enregistrament de la ubicació del telèfon en una variable cada vegada que es detecta la ubicació GPS 
Recordeu que amb aquests blocs, només hem fet la meitat de la feina. L'aplicació 
encara ha d'incorporar la informació de localització en el text de resposta 
automàtica, que serà enviat de tornada al remitent. Anem a fer-ho la propera 
vegada. 
Enviament de la ubicació com a part de la resposta 
Usant la variable UltimLloc, pot modificar el controlador d'esdeveniments 
Texting1.MessageReceived per afegir informació d'ubicació a la resposta. La Taula 
4-8 enumera els components que necessita per això. 
Taula 4-8. Blocs per mostrar informació d'ubicació en la resposta automàtica 
Tipus de Bloc Calaix Objectiu 
make text Text Si hi ha una lectura d'ubicació, construir un objecte de 
text compost. 
EtResposta.Text MessageTextBox Aquest és el missatge (personalitzat) al quadre de text. 
text ("La meva última 
Text Això es parlarà després que el missatge personalitzat 
localització és:") 
(noteu l'espai inicial). 
global UltimLloc LocationSensor Aquesta és una adreça com "C/Sant Joan 2, Agres, 
Espanya"
TEMA 4 16/18 
Com funcionen els blocs 
Aquest comportament es treballa en concert amb l'esdeveniment i la variable 
LocationSensor1.LocationChanged UltimLloc. Com es pot veure a la figura 4-10, en 
lloc de directament enviar un missatge amb el text en EtResposta.Text, la primera 
aplicació genera un missatge usant make text. Combina el text de resposta en 
EtResposta.Text amb el text "La meva última ubicació coneguda és:" seguit de la 
variable UltimLloc. 
Figura 4-10. Incloent informació d'ubicació en el text de resposta 
El valor per defecte de UltimLloc és "Desconeguda", de manera que si el sensor de 
localització encara no ha generat una lectura, la segona part del missatge de 
resposta conté el text "La meva última ubicació coneguda és: Desconeguda" Si hi ha 
hagut una lectura , la segona part de la resposta serà una cosa així com "la meva 
última ubicació coneguda és: C/Sant Joan 2, Agres, Espanya" 
Posa a prova la teva app. Des del segon telèfon, enviar un text al telèfon que 
executa l'aplicació. El segon telèfon rep el text de resposta amb la 
informació de localització? Si no ho fa, assegureu-vos que ha tornat GPS 
en la configuració de la ubicació del telèfon del primer.
TEMA 4 17/18 
L'aplicació completa: Cap missatge de text mentre 
es condueix 
La figura 4-11 mostra la configuració del bloc final per Cap missatge de text mentre 
es condueix. 
Figura 4-11. L'aplicació Cap missatge de text mentre es condueix completa
TEMA 4 18/18 
Variacions 
Quan ja hages acabat l'aplicació, és possible que vulgues explorar algunes 
variacions. Per exemple: 
• Escriviu una versió que permet a l'usuari definir respostes personalitzades per 
a determinats números de telèfon entrant. Hauràs d'afegir condicionals (if) 
blocs que comprovin aquests nombres. 
• Escriure una versió que envia respostes personalitzades en funció de si 
l'usuari està dins de certs límits de latitud / longitud. Per tant, si l'aplicació 
determina que estàs a l'habitació 222, enviarà de tornada "Joan està a 
l'habitació 222 i no pot escriure un missatge ara mateix." 
• Escriviu una versió que fa sonar una alarma quan un text es rep d'un nombre 
en una llista "notify". 
Resum 
Aquests són alguns dels conceptes que hem tractat en aquest tutorial: 
• El component Texting es pot utilitzar per a ambdós missatges de text, s'envia 
i processa els que reben. Abans de cridar a Texting.SendMessage, ha 
d'establir les propietats PhoneNumber i Message del component Texting. Per 
respondre a un text entrant, el programa ho controla amb 
Texting.MessageReceived. 
• El component TinyDB s'utilitza per emmagatzemar informació persistent al 
telèfon de la base de dades de manera que les dades poden ser recarregada 
cada vegada que s'obre l'aplicació. 
• El component TextToSpeech pren qualsevol objecte de text i llig en veu alta. 
• make text s'utilitza per reconstruir (o concatenar) parts separades del text en 
un objecte de text. 
• El component LocationSensor pot informar de la latitud, longitud i direcció 
actual del telèfon. Per assegurar que es té una lectura, ha d'accedir a les 
seves dades al controlador d'esdeveniments 
LocationSensor.LocationChanged, que s'activa la primera vegada que es 
realitza una lectura i en qualsevol canvi posterior.

T4 cap missatge

  • 1.
    TEMA 4 1/18 Cap missatge de text mentre es condueix Aquest tema explica el procés del desenvolupament de Cap missatge de text mentre es condueix, una aplicació que autorespòn als missatges de text que rep mentre està conduint. És un excel·lent exemple de com App Inventor proporciona accés a algunes de les grans característiques del telèfon Android, incloent el processament de text SMS, gestió de base de dades, text a veu, i el sensor d'ubicació. L'aplicació que es mostra a la Figura 4-1, respon automàticament (i de mans lliures) a qualsevol text amb un missatge del tipus "estic conduint ara mateix, et contestaré en breu." L'usuari pot canviar la resposta per diferents situacions. Per exemple, si vas a una reunió o una pel·lícula en lloc de conduir, la resposta pot ser modificada en conseqüència. Fins i tot si saps que l'aplicació autorespòn, el sorollet dels textos entrants poden matar-te amb curiositat. Aleshores l'aplicació llegeix el text en veu alta. El missatge de resposta pot contenir la seva ubicació actual. Si la seva parella està a casa preparant el sopar, ell o ella probablement li agradaria saber quant de temps més durarà el seu viatge, sense posar en perill en haver de contestar el text. Figure 4-1. L'aplicació de Cap missatge de text mentre es condueix
  • 2.
    TEMA 4 2/18 El que aprendràs Aquesta és una aplicació més complexa que les dels temes anteriors, de manera que haurà de construir una peça de funcionalitat al mateix temps, començant amb el missatge de resposta automàtica. Aprendràs sobre: • El component Texting per enviar missatges de text i processament de textos rebuts. • Un formulari d'entrada per enviar el missatge de resposta personalitzat. • El component de base de dades TinyDB per guardar el missatge personalitzat fins i tot després que l'aplicació es tanca. • L'esdeveniment Screen.Initialize per carregar la resposta personalitzada quan l'aplicació s'inicia. • El component Text-to-Speech per llegir en veu alta els textos. • El component LocationSensor per informar de la ubicació actual del conductor. Introducció Perquè aquesta aplicació funcioni, cal un mòdul de text a veu, Text-To-Speech Extended, al telèfon. Aquest mòdul està inclòs en Android versió 2 o superior. Quan el mòdul Text-To-Speech està instal·lat, obriu-lo per comprovar les seves característiques. Quan s'obre, trieu l'idioma per defecte que es desitgi. A continuació, seleccioneu "Listen to Preview". Si no se sent res, assegureu-vos que el volum del telèfon està activat. També pot canviar la manera com la veu sona en canviar el valor de la propietat del motor TTS predeterminada. Després d'haver configurat el mòdul Text-To-Speech al teu gust, connectar-se al lloc web App Inventor i començar un nou projecte. El nom de "CapMissatgeMentreCodueix" (els noms dels projectes no pot tenir espais) i establir el títol de la pantalla de "Cap missatge de text mentre es condueix". Obriu l'Editor de Blocs i connectar al telèfon.
  • 3.
    TEMA 4 3/18 Disseny dels components La interfície d'usuari de l'aplicació és relativament simple: té una etiqueta que mostra la resposta automatitzada, una casella de text i un botó per enviar un canvi. També hauràs de arrossegar un component Texting, un component TinyDB, un component TextToSpeech i un component LocationSensor, tot això es s'afegirà a la zona "Non-visible components". Pots veure com això es veurà en la instantània del Dissenyador de components que es mostra a la Figura 4-2. Figura 4-2. L'aplicació de No missatges de text mentre es condueix en el Dissenyador de components Pots construir la interfície d'usuari que es mostra a la Figura 4-2 arrossegant els components enumerats en la Taula 4-1. Establir les propietats dels components de la següent manera: • Establir el text de EtInfo a "El següent text serà enviat de resposta a tots els Textos SMS rebuts mentre aquesta aplicació està en marxa. " • Establir el text de EtResposta a "Estic conduint ara mateix, em posaré en contacte amb tu en breu." Comproveu la seva propietat boldness. • Establir el text de TBResposta a "". (Això deixa en blanc el quadre de text per a l'entrada de l'usuari.) • Ajusteu el Hint (Consell) de TBResposta a "Introduïu text de resposta nova." • Establir el text de BModificarResposta a "Modificar la resposta."
  • 4.
    TEMA 4 4/18 Afegir comportaments als Components Anem a començar per programar el comportament de resposta automàtica de text bàsic, i després, successivament, afegirem més funcionalitat. Taula 4-1. Tots els components per a l'aplicació Cap missatge de text mentre es condueix Component Grup Nom assignat Objectiu Label Basic EtInfo Deixeu que l'usuari sàpiga com funciona l'aplicació. Label Basic EtResposta La resposta, que serà enviada de tornada al remitent del text original. TextBox Basic TBResposta L'usuari haurà d'introduir la resposta aquí. Button Basic BModificarResposta L'usuari fa clic ací per enviar la resposta. Texting Social Texting1 Processar els textos. TinyDB Basic TinyDB1 Emmagatzemar la resposta a la base de dades. TextToSpeech Other stuff TextToSpeech1 Llegir en veu alta els textos. LocationSensor Sensors LocationSensor1 Saber on està el telèfon.
  • 5.
    TEMA 4 5/18 Programació d'una resposta automàtica Per al comportament de resposta automàtica, podràs utilitzar el component Texting d'App Inventor. Pots pensar en aquest component com una personeta dins del telèfon que sap llegir i escriure textos. Per a la lectura de textos, el component proporciona un bloc d'esdeveniments Texting.MessageReceived. Pots arrossegar aquest bloc cap a fora i col·locar blocs en el seu interior per mostrar el que ha de succeir quan un text és rebut. En el cas d'aquesta aplicació, volem enviar automàticament una còpia d'un text escrit prèviament de resposta. Per programar el text de la resposta, se li col·loca un bloc Texting1.SendMessage dins del bloc Texting1.MessageReceived. Texting1.SendMessage realment envia el text, de manera que primer haurà d'indicar al component quin missatge enviar, i a qui enviar-lo, abans de cridar a Texting1.SendMessage. La Taula 4-2 enumera tots els blocs que necessites per aquest comportament d'autoresposta, i la Figura 4-3 mostra com s'ha de buscar en l'Editor de blocs. Taula 4-2. Els blocs per a l'enviament d'una resposta automàtica Tipus de Bloc Calaix Objectiu Texting1.MessageReceived Texting El controlador d'esdeveniments que s'activa quan el telèfon rep un text. set Texting1.PhoneNumber to Texting Indiqueu la propietat PhoneNumber abans d'enviar. value number My Definitions El número de telèfon de la persona a qui se li envia el text. set Texting1.Message to Texting Indiqueu la propietat Message abans d'enviar missatges. EtResposta.Text EtResposta El missatge que l'usuari ha introduït. Texting1.SendMessage Texting Envieu el missatge. Figura 4-3. En resposta a un text entrant
  • 6.
    TEMA 4 6/18 Com funcionen els blocs Quan el telèfon rep un missatge de text, l'esdeveniment Texting1.MessageReceived es dispara. Com es mostra a la Figura 4-3, el número de telèfon del remitent està en l'argument number, i el missatge rebut és l'argument MessageText. Per a la resposta automàtica, l'aplicació ha d'enviar un missatge de text al remitent. Per enviar el text, primer ha de configurar les dues propietats fonamentals del component de missatges de text: PhoneNumber i Message.Texting. PhoneNumber s'estableix al número del remitent i Texting.Message s'estableix en el text que va escriure en EtResposta: "estic conduint ara mateix, et contestaré en breu". Quan s'estableix, l'aplicació crida a Texting.SendMessage per enviar realment la resposta. Estaràs preguntant-te sobre els quadres de color groc que tenim en l'Editor de Blocs. Aquests són comentaris, i es poden afegir fent clic en el botó dret en un bloc i seleccionant Afegir comentari. Un cop afegit un comentari, pot mostrar o amagar fent clic al signe d'interrogació negre que apareix. No ha de afegir comentaris al app, simplement hem inclòs aquí per ajudar a descriure cada bloc i el que fa. La majoria de la gent fa servir els comentaris per documentar la manera com esta construïda la seva aplicació o comentaris per a explicar com funciona el programa, però no faran que l'aplicació es comporta de manera diferent. Els comentaris són important, com vas fer l'aplicació i si la vols modificar més tard, i per a altres persones que puguin personalitzar-la. L'única cosa que tots estan d'acord sobre el programari és que canvia i es transforma sovint. Per això, comentar el codi és molt important en l'enginyeria de programari, i especialment amb el programari de codi obert com App Inventor. Posa a prova la teva app. Necessitaràs un segon telèfon per provar aquest comportament. Des del segon telèfon, enviar un text al telèfon que executa l'aplicació. El segon telèfon rebra el text de la resposta?
  • 7.
    TEMA 4 7/18 Introducció d'una resposta personalitzada A continuació, anem a afegir blocs de manera que l'usuari pot introduir la seva resposta personalitzada. En el Dissenyador de components, ha afegit un component TextBox denominat TBResposta, que és on l'usuari introduirà la resposta personalitzada. Quan l'usuari fa clic al BModificarResposta, ha de copiar l'entrada (TBResposta) al EtResposta, que s'utilitza per respondre als textos. La Taula 4-3 enumera els blocs que necessites per transferir una resposta que acaba d'introduir en el EtResposta. Taula 4-3. Blocs per mostrar la resposta personalitzada Tipus de Bloc Calaix Propòssit BModificarResposta BModificarResposta L'usuari fa clic en aquest botó per enviar un nou missatge de resposta. set EtResposta.Text to EtResposta Moure el valor d'entrada recent i l'origen. TBResposta.Text TBResposta L'usuari ha introduit la nova resposta aquí. Com funcionen els blocs Penseu en com funciona una forma d'entrada típica: primer entra alguna cosa en un quadre de text i, a continuació, feu clic a un botó d'enviar per indicar al sistema per processar-la. El formulari d'entrada per a aquesta aplicació no és diferent. La figura 4-4 mostra com els blocs es programen de manera que quan l'usuari fa clic al BModificarResposta, l'esdeveniment BModificarResposta.Click es dispara. Figura 4-4. Ajust de la resposta a l'entrada d'usuari El controlador d'esdeveniments en aquest cas còpia (o sets, en termes de programació) el que l'usuari ha introduït en TBResposta al EtResposta. Recordem que EtResposta conté el missatge que s'enviarà a la resposta automàtica, de manera que has de col·locar el missatge personalitzat que acaba d'introduir allà. Posa a prova la teva app. Escriviu una resposta personalitzada i presentar-la, i aleshores utilitzar el segon telèfon per enviar un altre text al telèfon que executa l'aplicació. Ha enviat la resposta personalitzada?
  • 8.
    TEMA 4 8/18 Emmagatzematge de la resposta personalitzat en una base de dades Has construït una gran aplicació ja, amb una condició: si l'usuari introdueix una resposta personalitzada i, a continuació, tanca l'aplicació i rellança ella, la resposta personalitzat no apareixen (en canvi, l'opció per defecte ho farà). Aquest comportament no és el que els usuaris esperen, voldran veure la resposta personalitzada quan es reiniciï l'aplicació. Perquè això passi, cal emmagatzemar aquesta resposta personalitzada persistentment. Es podria pensar que les dades ficades a la propietat EtResposta.Text estan tècnicament "emmagatzemades", però el problema és que les dades emmagatzemades en les propietats del component són dades transitòries. Dades transitòries són com la teua memòria a curt termini, i el telèfon "oblida" tan prompte com una aplicació es tanca. Si desitges que la teua aplicació recorde alguna cosa persistent, cal passar de memòria a curt termini (una propietat del component o variable) a la memòria a llarg termini (base de dades). Per emmagatzemar dades de manera constant, s'utilitzarà el component TinyDB, que emmagatzema les dades en una base de dades del dispositiu Android. TinyDB proporciona dues funcions: StoreValue i GetValue. La primera permet l'aplicació per emmagatzemar informació a la base de dades del dispositiu, mentre que el segon permet extraure la informació de l'aplicació que ja ha estat emmagatzemat. Per a moltes de les aplicacions, utilitzarà el següent esquema: 1. Emmagatzemar les dades de la base de dades cada vegada que l'usuari envia un nou valor. 2. Quan l'aplicació s'inicia, carrega les dades de la base de dades en una variable o propietat. Anem a començar per modificar el controlador d'esdeveniments BModificarResposta.Click perquè emmagatzeme les dades de forma constant, usant els blocs que figuren a la Taula 4-4. Taula 4-4. Blocs per emmagatzemar la resposta personalitzada amb TinyDB Tipus de Bloc Calaix Propòssit TinyDB1.StoreValue TinyDB1 Deseu el missatge personalitzat a la base de dades del telèfon. text ("EtResposta") Text Feu-la servir com l'etiqueta per a les dades. EtResposta.Text EtResposta El missatge de resposta ja és aquí.
  • 9.
    TEMA 4 9/18 Com funcionen els blocs Aquesta aplicació utilitza TinyDB per a prendre el text que acaba de posar en EtResposta i emmagatzemar a la base de dades. Com es mostra a la Figura 4-5, quan hagi de guardar alguna cosa a la base de dades, es proporciona una etiqueta amb ella, en aquest cas, l'etiqueta és "EtResposta". Penseu en l'etiqueta com el nom del lloc de les dades en la base de dades, que identifica de forma exclusiva les dades que s'emmagatzemen. Com veurem en la següent secció, farem servir la mateixa etiqueta ("EtResposta") en carregar les dades de nou a la base de dades. Figura 4-5. Emmagatzematge de la resposta personalitzada persistentment
  • 10.
    TEMA 4 10/18 Recuperació de la resposta personalitzat quan l'aplicació obre La raó per a l'emmagatzematge de la resposta personalitzada a la base de dades és el que es pot tornar a carregar en l'aplicació a la següent vegada que l'usuari l'obre. App Inventor proporciona un bloc d'esdeveniment especial que s'activa quan l'aplicació s'obre: Screen1.Initialize (si van completar TalpBarrejat al tema 3, ja ha vist això). Si arrossega el bloc d'esdeveniments i col·loca els blocs en aquest, els blocs s'executaran just quan l'aplicació s'inicia. Per aquesta aplicació, el controlador d'esdeveniments Screen1.Initialize ha de comprovar per veure si una resposta personalitzada s'ha posat a la base de dades. Si és així, la resposta personalitzada ha de ser carregada en l'ús de la funció TinyDB.GetValue. Els blocs que necessites per això es mostra a la Taula 4-5. Taula 4-5. Blocs per carregar les dades de nou en tant l'aplicació s'obre Tipus de Bloc Calaix Objectiu def variable ("resposta") Definition (No s'oblide: no és el mateix que el calaix de My Definitions) Una variable temporal per emmagatzemar les dades recuperades. text ("") Text El valor inicial de la variable pot ser qualsevol cosa. Screen1.Initialize Screen1 Això es produeix quan l'aplicació s'inicia. set global resposta to My Definitions Estableixi aquesta variable en el valor recuperat de la base de dades. TinyDB1.GetValue TinyDB1 Obtenir el text de resposta emmagatzemat a la base de dades. text ("EtResposta") Text Connectar-lo a la ranura de l'etiqueta de TinyDB.GetValue, assegurant-se que el text és el mateix que l'utilitzat en valor TinyDB.Store anterior. if Control Pregunti si el valor recuperat té una mica de text > Math Comprovar si la longitud del valor recuperat és major que 0. length text Text Comprovar si la longitud del valor recuperat és major que 0. global resposta My Definitions Aquesta variable conté el valor recuperat de TinyDB1.GetValue. number (0) Math Compareu això amb la longitud de la resposta. set EtResposta.Text to EtResposta Si hem recuperat alguna cosa, poseu-la en EtResposta. global resposta My Definitions Aquesta variable conté el valor recuperat de TinyDB1.GetValue.
  • 11.
    TEMA 4 11/18 Com funcionen els blocs Els blocs es mostra a la Figura 4-6. Per entendre'ls, cal preveure un usuari que obre l'aplicació per primera vegada, entrant en una resposta personalitzada, i obrir l'aplicació altres vegades posteriorment. La primera vegada que l'usuari obre l'aplicació, no hi haurà cap resposta personalitzada a la base de dades per carregar, de manera que desitja deixar la resposta per defecte al EtResposta. En els llançaments successius, que vol carregar la resposta personalitzada prèviament emmagatzemada a la base de dades i el col·loca al EtResposta. Figura 4-6. Càrrega de la resposta personalitzada de la base de dades durant la inicialització aplicació Quan l'aplicació s'inicia, l'esdeveniment Screen1.Initialize es dispara. L'aplicació crida a la TinyDB1.GetValue amb una etiqueta de "EtResposta", la mateixa etiqueta que va usar quan s'emmagatzema l'entrada de l'usuari de resposta personalitzada abans. El valor recuperat es col·loca en la resposta variable de manera que es pot comprovar abans que es col·loqui com el EtResposta. Pots pensar en per què t'agradaria comprovar el que rep de la base de dades abans de mostrar com el missatge personalitzat per a l'usuari? TinyDB torna text buit si no hi ha dades d'una etiqueta en particular a la base de dades. No hi haurà dades el primer cop que es llança l'aplicació, el que serà el cas fins que l'usuari introdueix una resposta personalitzada. Com que la variable de resposta té ara el valor retornat, es pot utilitzar el bloc per comprovar si la longitud del que ha estat rebut de la base de dades és més gran que 0. Si la longitud del valor contingut en resposta és més gran que 0, l'aplicació sap que TinyDB va fer alguna cosa a canvi, i el valor recuperat es pot col·locar en la EtResposta. Si la longitud no és més gran que 0, l'aplicació sap que no hi ha resposta emmagatzemada prèviament, de manera que no modifica el EtResposta (deixant la resposta per defecte). Posa a prova la teva app. No es pot provar aquest comportament a través de les proves en viu, ja que la base de dades es buida cada vegada que "Connect to Device" per reiniciar l'aplicació. En el seu lloc, seleccioneu “Package for Phone”→ Show Barcode i, a continuació, descarrega l'aplicació al teu telèfon mitjançant l'escaneig del codi de barres. Una vegada que l'aplicació està instal·lada, introduïu un missatge de resposta al nou TBResposta i feu clic al BModificarResposta. A continuació, tancar l'aplicació i torni a iniciar-lo. El seu missatge personalitzat apareix?
  • 12.
    TEMA 4 12/18 Llegint en veu alta els textos entrants En aquesta secció, podràs modificar l'aplicació perquè quan rebi un text, un número de telèfon del remitent, juntament amb el missatge, es llig en veu alta. La idea és que quan vas en cotxe i escoltes un soroll d'un missatge de text entrar, Pots tenir la temptació de revisar el text, encara que coneix l'aplicació que envia una resposta automàtica. Amb text-to-speech, es pot sentir els textos entrants i mantindre les mans al volant. Els dispositius Android proporcionen capacitats de text-to-speech (text a veu) i App Inventor proporciona un component, TextToSpeech, que llegirà tot text que li donis. (Tingueu en compte que aquí "text" s'entén en el sentit general de la paraula, una seqüència de lletres, dígits i puntuació; no un text SMS.) A la "Introducció" d'aquesta aplicació, li demana que descarregui un mòdul de ext-to- speech des del Android Market. Si no ho va fer llavors, hauràs de fer-ho ara. Quan el mòdul està instal·lat i configurat com desitja, pot utilitzar el component TextToSpeech dins App Inventor. El component TextToSpeech és molt fàcil d'utilitzar: només cal cridar a la seva funció de parla i connecti el text que desitgi parlat en la seva ranura missatge. Per exemple, la funció que es mostra a la Figura 4-7 deia: "Hola Món". Figura 4-7. Blocs per parlar "Hola Món" en veu alta Per a l'aplicació Cap missatge de text mentre condueix, hauràs de donar un missatge més complicat que se'ls parli, que inclou tant el text rebut i el número de telèfon de la persona que el va enviar. En lloc de connectar un objecte de text estàtic com el bloc de text "Hola Món", se li connecta un bloc make text. Una funció molt útil, fer que el text li permet combinar peces separades de text (o els números i altres caràcters) en un objecte de text únic. Hauràs de fer la crida a TextToSpeech.Speak al controlador d'esdeveniments Texting.MessageReceived programat anteriorment. Els blocs programats prèviament controlen aquest esdeveniment establint les propietats PhoneNumber i Missatge del component de missatges de text de manera adequada i després enviar el text de la resposta. Vas a estendre aquest controlador d'esdeveniments mitjançant l'addició dels elements que figuren a la Taula 4-6. Taula 4-6. Blocs per parlar en veu alta el text entrant Tipus de Bloc Calaix Objectiu TextToSpeech1.Speak TextToSpeech1 Digueu el missatge rebut en veu alta. make text Text Construir les paraules que es parlen. text ("SMS text received from") Text Les primeres paraules parlades. value number My Definitions El nombre del qual es va rebre el text original. text (".The message is") Text Posi un període després que el número de telèfon i dir després: "El missatge és". value messageText My Definitions El missatge original rebut.
  • 13.
    TEMA 4 13/18 Com funcionen els blocs Després que s'envia la resposta, la funció TextToSpeech1.Speak es cridada, tal com es mostra a la part inferior de la Figura 4-8. Pots connectar qualsevol objecte de text a la ranura missatge de la funció TextToSpeech1.Speak. En aquest cas, make text s'utilitza per construir les paraules que se'ls parli, que concatena (o afegeix), amb el text "text SMS rebut" i el número de telèfon des del qual es va rebre el missatge (value number), més el text ". El missatge és, " i finalment el missatge rebut (value MessageText). Per tant, si el text "hola" va ser enviat des del número "111-2222", el telèfon podria dir, "va rebre text SMS 111-2222. El missatge és hola ". Figura 4-8. Llegint en veu alta el text entrant Posa a prova la teva app. Necessitaràs un segon telèfon per provar l'aplicació. Des del segon telèfon, enviar un text al telèfon que executa l'aplicació. El telèfon que executa l'aplicació llegeixi el text en veu alta? Encara envia una resposta automàtica?
  • 14.
    TEMA 4 14/18 Afegir informació d'ubicació a la resposta Aplicacions com Place de Facebook i Latitude de Google utilitzen informació GPS per ajudar a la gent a fer un seguiment de la seua ubicació. Hi ha greus problemes de privacitat amb aplicacions d'aquest tipus, entre altres raons perquè el seguiment de localització de la gent pot semblar un "Gran Germà" en el que l'aparell d'un govern totalitari pot configurar per rastrejar el parador dels seus ciutadans. No obstant això, les aplicacions que utilitzen la informació d'ubicació pot ser molt útil si pensem en un nen perdut, o excursionistes que s'han perdut. En l'aplicació Cap missatge mentre es condueix, el seguiment de la ubicació es pot utilitzar per transmetre una mica més informació en resposta als textos entrants. En comptes de "estic conduint", el missatge de resposta pot ser alguna cosa com "estic conduint i estic en el carrer Sant Joan de Xàtiva." Per algú esperant l'arribada d'un amic o membre de la família, aquesta informació addicional pot ser útil . App Inventor proporciona el component LocationSensor per la interfície amb el GPS del telèfon (o sistema de posicionament geogràfic). A més de latitud i longitud, el LocationSensor també poden accedir a Google Maps per proporcionar l'adreça actual del conductor. És important assenyalar que LocationSensor no sempre té una lectura. Per això, cal anar amb compte en utilitzar el component correctament. En concret, la seva aplicació ha de respondre al controlador d'esdeveniments LocationSensor.LocationChanged. Un esdeveniment LocationChanged es produeix quan el sensor de localització del telèfon rep una primera lectura, i quan el telèfon es mou per generar una nova lectura. Ús dels blocs indicats a la Taula 4-7, el nostre esquema respondrà a l'esdeveniment LocationChanged col·locant l'adreça actual en una variable que anem a nomenar UltimLloc. Més tard, anem a canviar el missatge de resposta per incorporar l'adreça que obtenim d'aquesta variable. Taula 4-7. Blocs per configurar el sensor de localització Tipus de Bloc Calaix Objectiu def variable ("UltimLloc") Definitions Creeu una variable per contenir l'adreça última lectura. text ("Desconeguda") Text Establir el valor predeterminat en cas sensor del telèfon no està funcionant. LocationSensor1.LocationChanged LocationSensor1Això es va desencadenar a la lectura primera ubicació i cada canvi d'ubicació. set global UltimLloc to My Definitions Establiu aquesta variable que s'utilitzarà posteriorment. LocationSensor1.CurrentAddress LocationSensor1Aquesta és una adreça del carrer com "Carrer Willard 2222, Atlanta, Geòrgia."
  • 15.
    TEMA 4 15/18 Com funcionen els blocs L'esdeveniment LocationSensor1.LocationChanged es dispara la primera vegada que el sensor rep una lectura d'ubicació i quan el dispositiu es mou de manera que una nova lectura es genera. Com que es molt probable que voleu enviar una adreça com a part del missatge de resposta, la Figura 4-9 mostra com la funció LocationSensor1.CurrentAddress es cridada per obtenir aquesta informació i emmagatzemar-la en la variable UltimLloc. Entre bastidors, aquesta funció fa una crida a Google Maps (a través d'una API) per determinar l'adreça de carrer més propera per la latitud i longitud que el sensor llegeix. Figura 4-9. Enregistrament de la ubicació del telèfon en una variable cada vegada que es detecta la ubicació GPS Recordeu que amb aquests blocs, només hem fet la meitat de la feina. L'aplicació encara ha d'incorporar la informació de localització en el text de resposta automàtica, que serà enviat de tornada al remitent. Anem a fer-ho la propera vegada. Enviament de la ubicació com a part de la resposta Usant la variable UltimLloc, pot modificar el controlador d'esdeveniments Texting1.MessageReceived per afegir informació d'ubicació a la resposta. La Taula 4-8 enumera els components que necessita per això. Taula 4-8. Blocs per mostrar informació d'ubicació en la resposta automàtica Tipus de Bloc Calaix Objectiu make text Text Si hi ha una lectura d'ubicació, construir un objecte de text compost. EtResposta.Text MessageTextBox Aquest és el missatge (personalitzat) al quadre de text. text ("La meva última Text Això es parlarà després que el missatge personalitzat localització és:") (noteu l'espai inicial). global UltimLloc LocationSensor Aquesta és una adreça com "C/Sant Joan 2, Agres, Espanya"
  • 16.
    TEMA 4 16/18 Com funcionen els blocs Aquest comportament es treballa en concert amb l'esdeveniment i la variable LocationSensor1.LocationChanged UltimLloc. Com es pot veure a la figura 4-10, en lloc de directament enviar un missatge amb el text en EtResposta.Text, la primera aplicació genera un missatge usant make text. Combina el text de resposta en EtResposta.Text amb el text "La meva última ubicació coneguda és:" seguit de la variable UltimLloc. Figura 4-10. Incloent informació d'ubicació en el text de resposta El valor per defecte de UltimLloc és "Desconeguda", de manera que si el sensor de localització encara no ha generat una lectura, la segona part del missatge de resposta conté el text "La meva última ubicació coneguda és: Desconeguda" Si hi ha hagut una lectura , la segona part de la resposta serà una cosa així com "la meva última ubicació coneguda és: C/Sant Joan 2, Agres, Espanya" Posa a prova la teva app. Des del segon telèfon, enviar un text al telèfon que executa l'aplicació. El segon telèfon rep el text de resposta amb la informació de localització? Si no ho fa, assegureu-vos que ha tornat GPS en la configuració de la ubicació del telèfon del primer.
  • 17.
    TEMA 4 17/18 L'aplicació completa: Cap missatge de text mentre es condueix La figura 4-11 mostra la configuració del bloc final per Cap missatge de text mentre es condueix. Figura 4-11. L'aplicació Cap missatge de text mentre es condueix completa
  • 18.
    TEMA 4 18/18 Variacions Quan ja hages acabat l'aplicació, és possible que vulgues explorar algunes variacions. Per exemple: • Escriviu una versió que permet a l'usuari definir respostes personalitzades per a determinats números de telèfon entrant. Hauràs d'afegir condicionals (if) blocs que comprovin aquests nombres. • Escriure una versió que envia respostes personalitzades en funció de si l'usuari està dins de certs límits de latitud / longitud. Per tant, si l'aplicació determina que estàs a l'habitació 222, enviarà de tornada "Joan està a l'habitació 222 i no pot escriure un missatge ara mateix." • Escriviu una versió que fa sonar una alarma quan un text es rep d'un nombre en una llista "notify". Resum Aquests són alguns dels conceptes que hem tractat en aquest tutorial: • El component Texting es pot utilitzar per a ambdós missatges de text, s'envia i processa els que reben. Abans de cridar a Texting.SendMessage, ha d'establir les propietats PhoneNumber i Message del component Texting. Per respondre a un text entrant, el programa ho controla amb Texting.MessageReceived. • El component TinyDB s'utilitza per emmagatzemar informació persistent al telèfon de la base de dades de manera que les dades poden ser recarregada cada vegada que s'obre l'aplicació. • El component TextToSpeech pren qualsevol objecte de text i llig en veu alta. • make text s'utilitza per reconstruir (o concatenar) parts separades del text en un objecte de text. • El component LocationSensor pot informar de la latitud, longitud i direcció actual del telèfon. Per assegurar que es té una lectura, ha d'accedir a les seves dades al controlador d'esdeveniments LocationSensor.LocationChanged, que s'activa la primera vegada que es realitza una lectura i en qualsevol canvi posterior.