Usando el teléfono

En este capítulo vamos a aprender a usar nuestro teléfono para hacer llamadas, enviar y recibir mensajes y usar el reloj de nuestro dispositivo.

 Hacer llamadas desde tus programas

Vamos a aprender a hacer llamadas desde nuestros programas.
Crea un nuevo proyecto y llámalo "telefono_sms".
Desde el Diseñador dentro de la categoría de componentes Social coge los componentes PhoneCall y PhoneNumberPicker.
El primer componente PhoneCall es el componente que debes de usar para activar el teléfono de tu dispositivo para poder hacer llamadas. En sus propiedades verás únicamente una llamada PhoneNumber (número de teléfono). Puedes poner aquí directamente el número al que quieres llamar o hacerlo desde el Editor de bloques donde podrás cambiarlo según quieras dentro de tu programa.
El componente PhoneNumberPicker te permite elegir el número de teléfono de una lista con todos los contactos que tienes activos en tu teléfono o en tu cuenta Gmail. Lamentablemente este componente no funciona correctamente en algunos dispositivos y suele dar problemas.
Para terminar añade debajo un componente HorizontalArragement y pon dentro un componente textbox y un botón. Cambia el nombre del botón por "boton_llamar" y el texto por: "llamar". Cambia el nombre del componente textbox por "numero_telefono" y la propiedad Hint por "número de teléfono".
Vamos al Editor de bloques.
Coge el evento boton_llamar.Click
Verás el componente PhoneCall1. Coge el bloque "set PhoneCall1.PhoneNumber to" y vamos a pasarle el teléfono que haya puesto el usuario en el textobox numero_telefono.

Pégale el bloque numero_telefono.Text. Con esto le estamos diciendo al componente del teléfono cual va a ser el teléfono al que queremos llamar.
Si el componente PhoneNumberPicker funciona en tu dispositivo (aparece un ventana con tus contactos) entonces puedes usar el evento "PhoneNumberPicker.AfterPicking" y dentro de este evento usar la variable "PhoneNumberPicker.PhoneNumber" que te dirá cual es el número de teléfono que ha seleccionado el usuario de la lista y pasárselo al componente PhoneCall para hacer la llamada.
10 Ahora coge el procedimiento "call PhoneCall1.MakePhoneCall" y ponlo debajo. Este procedimiento es el que comienza la llamada.
Lógicamente tu teléfono tiene que tener la posibilidad de hacer llamadas de lo contrario Android responderá con un error.

 Enviar y recibir mensajes SMS

Ahora vamos a aprender a enviar mensajes SMS.
11 Vuelve al Diseñador y añade otro componente HorizontalArragement y mete dentro otro textbox y otro botón.
12 Cambia el nombre del botón por "boton_sms" y cambia el texto por "sms".
13 Cambia el nombre del textbox por "mensaje_sms" y la propiedad Hint por "mensaje sms".
14 Añade por último un componente Notifier y un componente Texting desde Social.
15 Vuelve al Editor de bloques.
16 Para enviar mensajes SMS el procedimiento es muy similar a llamar por teléfono. Primero coge el evento .Click del botón boton_sms.
Primero le decimos al componente Texting a qué teléfono queremos enviar el mensaje usando el bloque "set Texting.PhoneNumber to" y le pasamos la misma variable anterior numero_telefono.Text. Tendremos que asegurarnos de poner el número de teléfono en el textbox antes de pulsar el botón. Si el bloque PhoneNumberPicker funciona en nuestro dispositivo también podemos usarlo para obtener el número de teléfono del contacto al que queremos enviar el SMS.
17 Ahora le decimos cual es el mensaje usando el bloque "set Texting.Message to" y le pasamos la variable mensaje_sms.
18 Por último llamamos al procedimiento que hace el envío que se llama "call Texting.SendMessage"
19 Para que nuestra aplicación pueda recibir mensaje SMS usaremos el evento "when Texting.MessageReceived". Cógelo.
Este evento nos dice el número y el mensaje dentro de dos variables que podemos usar para mostrar una ventana de aviso en la pantalla usando el componente Notifier que hemos puesto desde el Diseñador.
20 Coge el procedimiento Notifier.ShowChooseDialog y usa los parámetros que nos pasa el evento .MessageReceived para mostrar la ventana como más te guste. Esto lo hemos aprendido a hacer antes en la aplicación caza_mosquitos.

Tu programa tiene que quedar así:


 Usando el reloj

Crea un proyecto nuevo y llámalo: "reloj"
Desde el Diseñador cambia las siguientes propiedades de la pantalla (screen):
AlignHorizontal=center, Scrollable=desactivado, AlignVertical=center
Añade una etiqueta y cambia el font para hacerlo más grande. Cambia su nombre y llámala etiqueta_hora.
Añade una segunda etiqueta y cambia el font para hacerla un poco más pequeña. Cambia el nombre de la etiqueta por etiqueta_fecha.
Añade un componente Slider y cambia las propiedades MaxValue por 60, MinValue por 1 y ThumbPosition por 30. El ancho (width) ponlo en 200px más o menos según te guste.
Añade debajo un botón y llámalo boton_activar_alarma. Cambia el texto del botón y pon "Activar alarma".
Ahora añade un componente de sonido sound y utiliza un archivo de sonido p. ej.: "alert1.wav" de la librería.
Finalmente añade dos componentes reloj (clock)
Al primer reloj lo vamos a llamar "reloj" y dejamos activadas todas sus propiedades. La propiedad TimerInterval la dejamos en 1000 (1 segundo)
Este reloj será el principal y siempre estará activo mostrando el tiempo en la pantalla de nuestra aplicación.
10 Al segundo reloj lo llamamos "reloj_alarma" y desactivamos la propiedad TimerEnabled porque queremos que esté apagado de momento.
Este reloj lo usaremos para la alarma. Cambiando su propiedad TimerInterval podemos decir cuándo queremos que salte. Ahora vamos a verlo. Abre el Editor de bloques.
11 Para esta aplicación vamos a controlar cuatro eventos posibles. Que son:
12 El evento .Timer del reloj normal con el que mostraremos la hora en la pantalla y otras cosas.
13 El evento .Timer del reloj_alarma que se activará cuando salte la alarma.
14 El evento boton_activar_alarma.Click que activará la alarma.
15 El evento slider.PositionChanged que nos dirá si el usuario ha movido el slider para seleccionar el número de segundos que queremos antes de que salte la alarma.
16 Coge estos cuatro eventos y ponlos en tu programa.
17 Ahora necesitamos una variable numérica. Llámala segundos_para_alarma y dale el valor 1. Puedes colocar la variable al principio de tu programa para que quede mejor.
Esta variable la vamos a usar simplemente para mostrar un contador en el botón de la aplicación que vaya decreciendo hasta que salte la alarma.
18 Vamos con el reloj principal en el evento reloj.Timer.
19 De las dos etiquetas que hemos creado coge sus bloques "set .Text to" dentro del evento.
20 Al bloque "set etiqueta_hora.Text" le vamos a pegar el procedimiento "call reloj.FormatTime instant" que encontrarás dentro del componente reloj.
21 Y a este último bloque le vamos a pegar el procedimiento "call reloj.Now" que encontrarás también dentro del componente reloj.
22 Al bloque "set etiqueta_fecha.Text" le vamos a pegar el procedimiento "call reloj.FormatDate instant" que encontrarás en el mismo sitio.
23 Y a este último bloque le vamos a pegar otro procedimiento "call reloj.Now". 
Con esto ya podemos mostrar la hora y la fecha de nuestro dispositivo.
24 Ahora vamos con nuestro slider.
Lo que queremos que pase es que al mover el slider cambie el texto del botón para mostrar el número de segundos para que se active la alarma.
25 Coge el bloque "set boton_activar_alarma.Text to" y ponlo dentro.
26 Crea un bloque de texto join y haz que tenga tres espacios vacíos
27 En el primero pon un bloque de texto que diga:"Activar alarma en "
28 En el segundo vamos a poner un bloque "math abs" y vamos a cambiar el valor "abs" a "round". A este bloque "round" le pegamos el parámetro "get Thumbposition"
29 En el último espacio ponemos un bloque de texto:" segundos." 
Con esto, cada vez que movemos el slider se actualiza el texto del botón con el número de segundos para la alarma según la posición del cursor del slider. 
30 Vamos con el evento boton_activar_alarma.Click 
Al pulsar este botón el usuario va a activar la alarma con los segundos que haya elegido desde el slider. 
31 Lo primero que vamos a hacer es recuperar el número de segundos que quiere el usuario para que se active la alarma. Este dato lo vamos a guardar en la variable segundos_para_alarma por lo que necesitamos el bloque "set segundos_para_alarma". Ponlo dentro del evento. 
32 El número de segundos que quiere el usuario nos lo indica la posición de nuestro slider así que tenemos que cogerlo de ahí. Recuerda que el valor de slider contiene decimales así que lo primero que necesitamos en usar un bloque match/abs. 
33 Cógelo y pégalo al bloque "set segundos_para_alarma". Ahora pega la variable "Slider1.Thumbposition" que tiene el valor que necesitamos. 
Ahora nuestra variable segundos_para_alarma contiene el valor de los segundos para la alarma que corresponde con la posición de nuestro slider. 
34 Usando este dato vamos a fijar el intervalo del reloj_alarma. Recuerda que al fijar el intervalo del reloj_alarma le estamos diciendo cada cuánto tiempo queremos que se active. Por lo tanto va a funcionar como un despertador que se activará cuando se cumplan los segundos que queremos. 
35 Coge el bloque "set reloj_alarma.TimerInterval" y ponlo debajo. 
Como el intervalo de los relojes se mide en milisegundos necesitamos hacer una operación de multiplicación primero. 
36 Crea un bloque math x y pégalo al bloque anterior. 
37 En el primer espacio pon la variable que hemos usado antes segundos_para_alarma y en el segundo un bloque numérico con el valor 1000. De esta forma estamos teansformando los segundos en milisegundos. 
38 Ahora necesitamos activar el reloj_alarma. Coge el bloque "set reloj_alarma.TimerEnabled" y actívalo con un bloque lógico true. 
39 Por último vamos a ocultar el slider usando el bloque "set slider1.Visible" y usando un bloque lógico false. 
Cuando el usuario pulsa el botón para activar la alarma se activa también el reloj_alarma en el intervalo de tiempo que hayamos usado. Vamos a ver ahora qué hacemos cuando este reloj se active, es decir, cuando salte la alarma. 
40 Vamos al evento reloj_alarma.Timer 
Lo primero que hacemos es apagar este reloj porque la alarma ya se ha activado y no necesitamos este reloj más de momento. 
41 Coge el bloque "set reloj_alarma.TimerEnabled" y usa un bloque lógico false. 
42 Queremos que suene un sonido así que coge el procedimiento "call sound1.Play" 
43 Volvemos a poner nuestro slider a la posición inicial. 
44 Coge el bloque "set slider1.ThumbPosition" y dale el valor 30. 
45 Finalmente volvemos a hacer visible el slider. 
46 "set slider1.Visible=true" 
Ahora nuestro reloj y la alarma funcionan perfectamente pero mientras la alarma está activada no se muestra nada en la pantalla. Vamos a añadir unos bloques más para que aparezca un contador en el botón que nos muestre una cuenta atrás hasta que salte la alarma. Para esto hemos creado la variable segundos_para_alarma. 
47 Volvemos al evento reloj.Timer y debajo de las etiquetas añade un bloque de control "if then-do" 
48 Lo que queremos comprobar es si la alarma está activada. Lo podemos saber si comprobamos si el reloj_alarma está activado. Pega en el espacio test del bloque de control el bloque "reloj_alarma.TimerEnabled". 
49 Si el reloj_alarma está activo entonces vamos a hacer esto: 
50 Primero restamos un 1 al contador segundos_para_alarma. 
51 Coge un bloque "set global segundos_para_alarma" 
52 Crea un bloque Math -. 
53 Al primer espacio le ponemos la variable "global segundos_para_alarma" 
54 En el segundo espacio pon un 1. 
55 Pégalo todo al bloque "set global segundos_para_alarma" anterior. 
Ahora vamos a actualizar el texto del botón. 
56 Coge un bloque "set boton_activar_alarma.Text" 
57 Crea dos bloque text/join y júntalos. 
58 En el primer espacio pon "Alarma activa en " 
59 En el segundo pon la variable "global segundos_para_alarma" 
60 En el último pon: " segundos." 
61 Júntalo todo al bloque "set boton_activar_alarma.Text" anterior.
Ahora al activar la alarma verás que el texto del botón va contando los segundos que faltan para que salte la alarma. 
Nuestro programa ha quedado así: