Aquest tutorial demostra com una aplicació pot respondre automàticament als missatges de text.Crearàs una aplicació que retorna una resposta quan es rep un missatge de text. La idea per a l’aplicació procedeix de l’estudiant Daniel Finnegan de la Universitat de San Francisco.
Primers passos
Connecta’t al lloc web de App Inventor i comença un nou projecte. Nómbralo NoTextWhileDriving, i també el Title (títol) de la pantalla a NoTextWhileDriving. Obre l’editor de blocs i conéctalo al telèfon.
Introducció
Dissenyaràs l’aplicació perquè enviï una resposta per a qualsevol missatge rebut. També permetràs l’usuari personalitzar la resposta enviada.
Aquest tutorial introdueix els següents conceptes de App Inventor:
- El component texting per enviar textos i processar els textos rebuts.
- El component base de dades TinyDB per guardar el missatge personalitzat fins i tot quan es tanca l’aplicació.
Prepara els components
La interfície d’usuari per NoTextWhileDriving és simple: té una caixa de text per al missatge de resposta i un botó per enviar els canvis en el missatge. També necessitaràs un component texting i un component TinyDB, els quals apareixeran en l’àrea de components “no visuals”. A sota hi ha una taula amb instruccions detallades per al disseny dels components, però pots també construir-la a partir la la següent imatge de com haurien de quedar:

Els components que es mostren a continuació són els usats per crear la pantalla del dissenyador mostrada més amunt. Arrossega cada component des de la Paletadins el Viewer i nómbralos com s’especifica a continuació:
| Tipus de component | Grup de la paleta | Com ho diràs | Propòsit del component |
| Label | Basic | PromptLabel | Informa l’usuari sobre el funcionament de l’aplicació |
| TextBox | Basic | MessageTextbox | L’usuari introduirà la seva resposta personalitzada aquí |
| Button | Basic | SubmitResponseButton | L’usuari fa clic aquí per enviar la resposta a la base de dades |
| Texting | Social | Texting1 | El component que processarà els textos |
| TinyDB | Basic | TinyDB1 | El component que emmagatzemarà la resposta a la base de dades |
Ajusta les propietats dels components de la manera:
- Canvia la propietat Text de PromptLabel a “The text below will be sent in response to all texts while this app is running.” (El text a continuació s’enviarà com a resposta a tots els missatges mentre l’aplicació estigui funcionant)
- Canvia la propietat Text de MessageTextbox a “I’ma driving right now, I’ll contact you shortly”. (Estic conduint, et trucaré aviat)
- Canvia la propietat Text de SubmitResponseButton a “Modify Response”. (Modificar la resposta)
Afegeix comportaments als components
NoTextWhileDriving té els següents comportaments:
1. Quan es rep un missatge, el text introduït en MessageTextbox s’envia com a missatge de text en resposta al remitent.
2. Quan l’usuari modifica el missatge personalitzat a MessageTextbox i fa clic SubmitResponseButton, el nou missatge es guarda de manera persistent a la base de dades del telèfon.
3. Quan s’inicia l’aplicació, el missatge personalitzat es carrega des de la base de dades a MessageTextbox.
Responent a un missatge de text
Quan es rep un missatge al telèfon, l’esdeveniment Texting.MessageReceived és iniciat. El teu aplicació ha de manejar aquest esdeveniment ajustant les propietatsPhoneNumber i Message del component texting apropiadament i enviar text de resposta.
Necessitaràs els següents blocs:
| Tipus de bloc | Calaix | Propòsit |
| Texting1.MessageReceived | Texting1 | el controlador d’esdeveniment que s’activa quan es rep un missatge de text |
| setembre Texting1.PhoneNumber to | Texting1 | Ajusta la propietat PhoneNumber abans d’enviar. |
| value number | My Definitions | aquest és el número de telèfon de la persona que va enviar el missatge |
| setembre Texting1.Message to | Texting1 | s’ajusta la propietat Message abans d’enviar |
| MessageText.Text | MessageText | És el missatge que l’usuari ha introduït. |
| Texting1.SendMessage | Texting | Envia el missatge. |
Els blocs han de quedar així:

Com treballen els blocs
Quan el telèfon rep qualsevol missatge, l’esdeveniment Texting1.MessageReceived és activat. El número de telèfon del remitent està en l’argument number, i el missatge del remitent en l’argument messageText.
En resposta, l’aplicació envia un missatge de text al remitent. Per enviar un missatge, l’aplicació ajusta les dues propietats clau del component texting: la propietatPhoneNumber i la propietat Message. Texting.PhoneNumber s’ajusta al nombre del remitent, i Texting.Message s’ajusta al missatge de MessagetextBox – aquest pot ser, “I’ma driving right now, I’ll contact you shortly.”, (Estic conduint, et trucaré aviat) per defecte, o l’usuari també podrà modificar. Quan aquestes propietats estan ajustades, es diu a Texting1.SendMessage per enviar el missatge de resposta.
Prova el comportament. Necessitaras un segon telèfon per provar aquest comportament. Des del segon telèfon, envia un missatge de text al telèfon que està executant l’aplicació. Rep el segon telèfon el missatge de resposta? Si això funciona, prova a modificar el missatge de resposta i enviar un altre missatge des del segon telèfon. ¿S’ha enviat la nova resposta?
Emmagatzemar la resposta personalitzada
Fins ara l’aplicació funciona, però si la tanques i la tornes a obrir el missatge que has personalitzat s’haurà perdut. Per fer les coses d’una manera més convenient, emmagatzema la resposta personalitzada que l’usuari ha introduït en una base de dades utilitzant el component TinyDB.
TinyDB et proporciona dues bloc: StoreValue i GetValue. D’aquesta manera et permet emmagatzemar i etiquetar una peça d’informació, que més tard podràs recuperar.
Necessitaràs els següents blocs per emmagatzemar la resposta emmagatzemada:
| Tipus de bloc | Calaix | Propòsit |
| SubmitResponseButton.Click | SubmitResponseButton | L’usuari fa clic en aquest botó per guardar el missatge de resposta |
| TinyDB1.StoreValue | TinyDB1 | emmagatzema el missatge de resposta a la base de dades del telèfon |
| text (“responseMessage”) | Text | és usat com a etiqueta per a les dades |
| MessageTextbox.Text | MessageTextbox | el missatge de resposta introduït per l’usuari aquí |
Els blocs han de quedar així:

Com treballen els blocs
Quan l’usuari fa clic a SubmitResponseButton, l’aplicació emmagatzema la resposta introduïda a la base de dades. El text “responseMessage” és usat com a etiqueta per a identificar específicament la informació – més tard usaràs aquesta etiqueta per recuperar el missatge des de la base de dades.
Recuperant el missatge de resposta emmagatzemat
Programa el controlador d’esdeveniment Screen1.Initialize perquè la resposta personalitzada que s’ha emmagatzemat sigui recuperada des de la base de dades i col · locada en MessageTextbox. Comprova les dades recuperats per assegurar-te que contenen “alguna cosa” – després de tot, la primera vegada que s’usi l’aplicació, la base de dades no tindrà cap missatge guardat. Si hi ha un missatge guardat, col · loca en MessageTextbox perquè l’usuari pugui veure i que pugui ser usat per respondre als missatges entrants.
Necessitaràs els següents blocs:
| Tipus de bloc | Calaix | Propòsit |
| def variable (“response”) | Definitions | Una variable temporal per emmagatzemar les dades recuperats |
| text (buit) | Text | El valor inicial de la variable pot ser qualsevol cosa |
| Screen1.Initialize | Screen1 | Aquest és activat quan s’inicia l’aplicació |
| setembre response to | My Definitions | canviessis la variable el valor recuperat de la base de dades |
| TinyDB1.GetValue | TinyDB1 | pren la resposta de text emmagatzemada a la base de dades |
| text (“responseMessage”) | Text | col · loca a la ranura tag de GetValue, assegura’t que el text és el mateix que es va usar en StoreValue above |
| if test | Control | per preguntar si el valor recuperat conté algun text |
| > Block | Math | comprova si la longitud del valor recuperat és> (major que) 0 |
| length text | Text | comprova si la longitud del valor recuperat és més gran que 0 |
| global response | My Definitions | aquesta variable manté el valor retornat des GetValue |
| number (0) | Math | per comparar amb la longitud de la resposta |
| setembre MessageTextbox.Text to | MessageTextbox | si recuperem alguna cosa, l’introduïu a MessageTextbox |
| global response | My Definitions | aquesta variable manté el valor retornat des GetValue |
Els blocs han de quedar així:

Com treballen els blocs
Quan s’inicia l’aplicació, l’esdeveniment Screen1.Initialize és activat. L’aplicació crida a la base de dades TinyDB1.GetValue amb l’etiqueta (tag) “responseMessage” – la mateixa etiqueta usada quan almacenaste l’entrada de l’usuari anteriorment. El valor resultant es col · loca en la variable de resposta (response).
La variable de resposta s’usa perquè el valor rebut de la base de dades pugui ser comprovat. Si té una longitud de 0, llavors no hi ha una entrada a la base de dades amb l’etiqueta “responseMessage” – cosa que passarà la primera vegada que s’usi aquesta aplicació. Però si el missatge és més gran que 0, l’aplicació sap que una resposta ha estat emmagatzemada anteriorment, i el valor retornat pot ser col · locat en MessageTextBox qual cosa podrà veure l’usuari i s’utilitzarà com a resposta als missatges enviats.
Prova l’aplicació. Introdueix una nova resposta a MessageTextbox i fes clic a SubmitResponseButton. Llavors reinicia l’aplicació fent clic al botó Restart App a l’Editor de blocs. Això farà que l’aplicació es reiniciï tal com ho faria quan l’usuari tanca i torna a obrir l’aplicació més tard. Apareix el missatge personalitzat que has introduït?
No Text While Driving, programa final

Variacions
Quan tinguis l’aplicació No Text While Driving funcionant, potser vulguis explorar algunes variacions. Per exemple.
- Crea una versió que llegeixi en veu alta els missatges rebuts. Necessitarà utilitzar el component TextToSpeech.
- Crea una versió que permeti a l’usuari crear missatges personalitzats per nombres en particular.
- Crea una versió que enviï respostes personalitzades partir de la ubicació de l’usuari (per exemple, Estic en uneixin església …)
Revisió
Aquestes són algunes de les idees examinades en aquest tutorial:
- El component texting pot ser usat tant per enviar missatges com per processar els que es reben.
- El component TinyDB s’usa per emmagatzemar informació de manera persistent, a la base de dades del telèfon, perquè estigui disponible cada vegada que s’iniciï l’aplicació.
Escaneja l’aplicació d’exemple per al teu telèfon
Escaneja el codi Qr amb el teu telèfon per instal · lar i executar l’aplicació d’exemple.
