Professional Documents
Culture Documents
Pgina 1
En Estados Unidos, el
28% de los accidentes de
trfico estaban provocados por
conductores que hablaban por
su telfono mvil en el ao
2010. Ms de 200.000 tuvieron
lugar mientras el que conduca
estaba escribiendo un mensaje
de texto. Precisamente, por
esto, muchos pases han
prohibido el uso de mviles
cuando se est al volante.
Puedes ver el texto completo
desde aqu.
Daniel Finnegan, un alumno que asista en el ao 2010 a un curso de programacin de
AppInventor tuvo una idea para solucionar el problema de los conductores y los telfonos mviles.
Cre un aplicacin capaz de responder automticamente cualquier mensaje de texto. Enva un
mensaje al remitente del tipo I'm driving right now, I'll contact you shortly. Despus de plantear
la idea inicial, pens en una serie de mejoras:
La aplicacin lee el texto en voz alta: Aunque sepas que responder automticamente al
remitente, es muy posible que la curiosidad haga que cojas el mvil.
Pgina 2
Qu aprender ?
La aplicacin de este captulo es ms compleja que las vistas hasta ahora. Por eso, iremos
construyendo sus funcionalidades de una en una. Vamos a empezar con el sistema responsable de
generar las respuestas automticas. En la creacin de este bloque veremos los siguientes puntos:
El componente Texting se utiliza para enviar textos y procesar los mensajes recibidos.
Empezamos
Para que esta aplicacin funcione deberemos de trabajar con Text-to-Speech Extended. Se
trata de un mdulo capaz de convertir un texto en palabras. Est incluido en la versin 2 (y
posteriores) del sistema operativo Android. Si tu telfono cumple esto no hay nada de lo que
preocuparse.
Pgina 3
Tipo de
Grupo de
componente
Palette
Label
Basic
Cmo lo llamaremos
Informacion
Finalidad
Permite que el usuario sepa cmo funciona
la aplicacin.
Label
Basic
Respuesta
TextBox
Basic
Nueva_Respuesta
Button
Basic
Enviar
Texting
Social
Texting1
Procesa el texto.
TinyDB
Basic
TinyDB
TextToSpeech
Other
TextToSpeech1
LocationSensor1
stuff
LocationSensor Sensors
Utiliza los siguientes puntos para definir las propiedades de los componentes:
Escribe el texto El texto que se encuentra abajo se enviar como respuesta al SMS
recibido cuando la aplicacin est abierta. en la propiedad Text de Informacion.
Pgina 4
Deja en blanco el valor del campo Text de Nueva_Respuesta. As, el campo de texto donde
el usuario escribir su mensaje aparecer sin contenido.
Pgina 5
La siguiente tabla muestra todos los bloques que necesitamos para definir el
comportamiento del contestador automtico:
Tipo de bloque
Texting1.MessageReceived
Cajn
Texting
Finalidad
Controlador de eventos que se lanzar cuando
el telfono reciba un mensaje de texto.
Set Texting1.PhoneNumber to
Texting
Pgina 6
Cajn
My Definitions
Finalidad
El nmero de telfono del remitente que nos
envi el mensaje.
Set Texting1.Message to
Texting
Respuesta.Text
Respuesta
Texting1.SendMessage
Texting
Enva el mensaje.
PRUEBA!!!!
Vicente Destruels Moreno
Pgina 7
PRUEBA!!!!
Guardar la respuesta personalizada en una base de datos
Si el usuario cierra el programa, cuando vuelva a abrirlo la contestacin se habr perdido y
se emplear la opcin predeterminada, para evitar esto hemos de guardar las respuestas en un
elemento con memoria a largo plazo: la base de datos del telfono.
Para almacenar un dato persistentemente debemos utilizar el componente TinyDB. Ser el
encargado de guardar la informacin en la base de datos del dispositivo Android. TinyDB tiene dos
funciones: StoreValue y GetValue. La primera permite guardar informacin en la base de datos del
dispositivo y la segunda recuperarla desde la base de datos en una variable o una propiedad.
Empezaremos modificando el controlador de eventos Enviar.Click para que guarde la
informacin de forma persistente. Para ello usaremos los bloques de la tabla de abajo.
Pgina 8
Tipo de bloque
TinyDB1.StoreValue
Cajn
TinyDB1
Finalidad
Almacena el mensaje personalizado en la base
de datos del telfono.
Text (MensajeRespuesta)
Text
Respuesta.Text
Respuesta
Pgina 9
Tipo de bloque
def variable (responder)
Cajn
Definition
Finalidad
Una variable temporal donde se guardar la
informacin.
Text ()
Text
Screen1.Initialize
Screen1
My Definitions
TinyDB1.GetValue
TinyDB1
Text (MensajeRespuesta)
Text
If
Control
>
Math
Length text
Text
global response
My Definitions
Number (0)
Math
Set Respuesta.Text to
Respuesta
global Responder
My Definitions
Pgina 10
La primera vez que el usuario abre la aplicacin no habr ninguna respuesta personalizada
guardada en la base de datos, por lo que deberemos usar la predeterminada almacenada en
Respuesta. Como va a ser modificada, las prximas veces que abra la aplicacin deberemos
recuperarla de la base de datos y colocarla en Respuesta. Cuando se abra la aplicacin, se lanzar el
evento Screen1.Initialize (arrastra el bloque Initialize desde Screen1 que se encuentra en My
Blocks).
Pgina 11
Pgina 12
PRUEBA!!!!
Leer en voz alta los mensajes recibidos
En esta seccin modificaremos la aplicacin para que, cuando recibamos un mensaje, el
telfono lea en voz alta el nmero del remitente y el contenido. La idea es que, cuando estemos al
volante y oigamos que se ha recibido un mensaje, aunque sepamos que hay una aplicacin en
marcha que se encargar de contestar automticamente al remitente, evitemos la tentacin de coger
el telfono para ver quin nos escribe y qu nos cuenta. Gracias a text-to-speech, escucharemos el
mensaje recibido sin soltar el volante.
Crearemos una llamada a TextToSpeech.Speak (leer en voz alta el mensaje recibido) desde
el controlador de eventos Texting.MessageReceived que programamos con anterioridad. Es decir,
arrastra el bloque call TextToSpeech. Speak message dentro y al final del bloque
MessageReceived ya creado.
El bloque call make text (del cajn text) construir las palabras que se leern en voz alta y
lo concatenamos a la salida de Speak. Para crearlo se unen las siguientes cadenas de texto:
Recibido SMS de , el nmero de telfono desde donde se envi (value number), el texto (. El
mensaje es, ) y, por ltimo, el contenido del aviso recibido (value messageText). Arrastramos el
bloque call make text a la ranura del Speak. Despes arrastramos un bloque text text a la salida de
la ranura del call make text que acabamos de aadir. Cambiamos el campo text del bloque text
para personalizarlo a Recibido SMS de. Seguimos construyendo el make text y aadimos ahora
el nmero de telfono con value number desde My Definitions. Seguimos con el texto . El
mensaje es, y terminamos con el contenido del aviso recibido value messageText.
Pgina 13
PRUEBA!!!!
Agregar a la respuesta informacin sobre la ubicacin del telfono
En la aplicacin podemos utilizar los datos sobre la ubicacin del telfono para proporcionar
algo ms de informacin en la respuesta que enviamos automticamente desde nuestro terminal.
AppIinventor cuenta con el componente LocationSensor, capaz de interactuar con el sistema GPS
del telfono. Adems de recuperar informacin sobre la latitud y la longitud de la posicin donde
est el terminal, tambin puede consultar el contenido de Google Maps para indicar el nombre de la
calle.
La aplicacin debera de responder al controlador de eventos
LocationSensor.LocationChanged. Antes incluso de que el telfono sea capaz de leer el valor de
la posicin del sensor, ya habremos cambiado de ubicacin (LocationChanged) y el telfono tendr
que intentar establecer la nueva posicin, guardando la direccin actual dentro de una variable
llamada Ultimalocalizacionconocida. Ms tarde, modificaremos el mensaje de respuesta para
incluir la direccin que obtendremos de esta variable.
Pgina 14
Tipo de bloque
def variable
Cajn
Definition
(Ultimalocalizacionconocida)
Finalidad
Crea una variable donde guardaremos la
direccin obtenida en la ltima lectura del
sensor de ubicacin.
Text (Desconocido)
Text
LocationSensor1.LocationChanged
Set global
My Definitions
Ultimalocalizacionconocida to
LocationSensor1.CurrentAddress
La variable ser:
An tenemos que hacer que la aplicacin incorpore la informacin sobre nuestra posicin en
el mensaje que enviar automticamente al remitente.
Pgina 15
Tipo de bloque
make text
Cajn
Text
Finalidad
Si hay datos sobre la posicin del
terminal, se construir un objeto de
texto.
Respuesta.Text
MesasageTextBox
Text
conocida es:)
global Ultimalocalizacionconocida
LocationSensor
Pgina 16
PRUEBA!!!!
Pgina 17
La aplicacin finalizada:
Variaciones
Escribe una versin que permita que el usuario defina una serie de mensajes personalizados
para ciertos nmeros de telfono. Debers utilizar los bloques condicionales (if) para que
comprueben los nmeros del remitente.
Escribe una versin que enve respuestas personalizadas basndose en la posicin del
remitente. As pues, si la aplicacin determina que te encuentras en la habitacin 222 de un
hotel y su remitente se halla en otro cuarto del mismo hotel, puedes enviar un mensaje que
diga En este momento, Javier se encuentra en la habitacin 222..
Escribe una versin que emita una alarma cuando el nmero del remitente se ubique dentro
de una lista de notificacin.
Pgina 18