T4 cap missatge

18
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

Transcript of T4 cap missatge

Page 1: T4 cap missatge

TEMA 4 1/18

Cap missatge de text mentre es condueixAquest 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

Page 2: T4 cap missatge

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.

Page 3: T4 cap missatge

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."

Page 4: T4 cap missatge

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.

Page 5: T4 cap missatge

TEMA 4 5/18

Programació d'una resposta automàticaPer 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àticaTipus 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

Page 6: T4 cap missatge

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?

Page 7: T4 cap missatge

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 personalitzadaTipus 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?

Page 8: T4 cap missatge

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í.

Page 9: T4 cap missatge

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

Page 10: T4 cap missatge

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'obreTipus 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.

Page 11: T4 cap missatge

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?

Page 12: T4 cap missatge

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.

Page 13: T4 cap missatge

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?

Page 14: T4 cap missatge

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."

Page 15: T4 cap missatge

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 localització és:")

Text Això es parlarà després que el missatge personalitzat (noteu l'espai inicial).

global UltimLloc LocationSensor Aquesta és una adreça com "C/Sant Joan 2, Agres, Espanya"

Page 16: T4 cap missatge

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.

Page 17: T4 cap missatge

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

Page 18: T4 cap missatge

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.