Está en la página 1de 9

Coordinación de Ingeniería en

Sistemas Computacionales

Materia: Programación Móvil 2


Práctica: Broadcast Receiver y Telefonía: Respuesta automática
Alumno(s): Arturo García Ibarra Fecha: 20/Marzo/2020

Objetivo

Realizar una aplicación en Android que permita responder de manera automática con un SMS,
cuando entre la llamada de un número específico. El texto de la respuesta automática se ingresa
en la aplicación, así como el número al que se le responderá.

Material

- Laptop
- Android Studio
- Emulador Nox
- SmartPhone
Marco Teórico

A partir de Android 9 (API nivel 28), la emisión NETWORK_STATE_CHANGED_ACTION no


recibe información sobre la ubicación del usuario ni los datos de carácter personal.
Además, si tu app está instalada en un dispositivo que ejecuta Android 9 o una versión posterior,
las emisiones del sistema desde Wi-Fi no contienen SSID, BSSID, información de conexión ni
resultados de análisis. Para obtener esta información, en su lugar, llama a getConnectionInfo ().
Cómo recibir emisiones
Las apps pueden recibir emisiones de dos maneras: mediante receptores declarados en el
manifiesto y mediante receptores registrados en el contexto.
Receptores declarados en el manifiesto
Si declaras un receptor de emisión en tu manifiesto, el sistema inicia la app (si aún no está en
ejecución) cuando se envía la emisión.
Cómo enviar emisiones
Android ofrece tres maneras para que las apps envíen emisiones:
Coordinación de Ingeniería en
Sistemas Computacionales

 El método sendOrderedBroadcast (Intent, String) envía emisiones a un receptor por vez.


Como se ejecuta un receptor por vez, este puede propagar un resultado al siguiente o
puede anular por completo la emisión de manera que no se transmita a otros. El orden en el
que se ejecutan los receptores puede controlarse con el atributo android: priority del filtro de
intent coincidente; los receptores con la misma prioridad se ejecutarán en orden aleatorio.
 El método sendBroadcast (Intent) envía emisiones a todos los receptores en un orden no
especificado, lo que se denomina emisión normal. Este método es más eficiente, pero
implica que los receptores no pueden leer los resultados de otros receptores, propagar los
datos recibidos de la emisión ni anular la emisión.
 El método LocalBroadcastManager.sendBroadcast envía emisiones a los receptores que
están en la misma app que el emisor. Si no necesitas enviar emisiones entre apps, usa
emisiones locales. La implementación es mucho más eficiente (no se requiere
comunicación entre procesos) y no tienes que preocuparte por ningún problema de
seguridad relacionado con otras apps que puedan recibir o enviar emisiones.

Un Broadcast Receiver es el componente que está destinado a recibir y responder ante eventos
globales generados por el sistema, como un aviso de batería baja, un SMS recibido, un SMS
enviado, una llamada, un aviso de de la tajea SD, etc. y también a eventos producidos por otras
aplicaciones.

Para crear un Broadcast Receiver simplemente tenemos que crear una clase que herede de
BroadcastReceiver y sobrescribir el método onReceive () que es el método que se ejecutará cada
vez que se produzca el evento al que este suscrito nuestro broadcast receiver. Es importante tener
en cuenta que dentro del método onReceive () no se deben de llevar a cabo operaciones que se
lleven mucho tiempo ni operaciones de persistencia.
Coordinación de Ingeniería en
Sistemas Computacionales

Además de crear el Broadcast Receiver es necesario registrarlo en la aplicación como tal para lo
que tenemos dos posibilidades:

 Añadir en el AndroidManifest.xml un <receiver> con el nombre del Broadcast Receiver y un


<intent-filter> con la acción a la que tiene que responder.
 Si se quiere hacer en tiempo de ejecución se puede realizar mediante el método
registerReceiver de la clase Context.

Desarrollo

MAIN ACTIVITY

En este fragmento de código se declaran las variables que sirven para instanciar los widgets que
declaramos en el layout, con dichas variables podremos obtener algunos valores que nos
interesan verificar si estan llenos los campos.
Coordinación de Ingeniería en
Sistemas Computacionales

En este fragmento de código se declara el método onCallStateChanged el cual sirve para


identificar si hay alguna llamada entrante y la variable de tipo String numLlamada captura el valor
del número del que se está recibiendo la llamada telefónica y el switch verifica el estado en que se
encuentra la llamada actualmente.

En este fragmento de código se asocian las variables que declaramos anteriormente con los
widgets que se encuentran en el layout. Aquí también se valida si los permisos de mandar un
mensaje SMS y de leer el estado del teléfono cuando se realiza una llamada han sido permitidos y
en caso de que el usuario los haya rechazado se le vuelve a preguntar que si desea dar los
permisos antes mencionados a la aplicación.
Coordinación de Ingeniería en
Sistemas Computacionales

Los siguientes dos métodos contienen el código que sirve para que la variable de tipo
mTelephonyManager escuche el estado de la llamada, aunque la aplicación se encuentre en los
estados onPause y en onStop.
Coordinación de Ingeniería en
Sistemas Computacionales

El método send es el encargado de mandar el mensaje al número telefónico que realiza la llamada
entrante, este método verifica que el número de telefono que se coloca en el widget EditText
coincida con el número telefonico que esta realizando la llamda, en caso de que coincida y que el
texto del mensaje que se desea enviar a este dispositivo no este vacio, el mensaje se envia
automaticamente al número telefónico que esta realizando la llamada entrante.

El método checkPermission sirve para verificar si los permisos que se le piden al usuario han sido
o no concedidos.
Coordinación de Ingeniería en
Sistemas Computacionales

LlamadaEntrante

El método OnReceive sireve para verificar el estado de la llamada, en este método se imprime un
mensaje que dice si la llamda es contestada, entrante o finalizada.
Coordinación de Ingeniería en
Sistemas Computacionales

ActivityDato

El resultado se muestra en la imagen. Donde podemos editar el número al que enviaremos el


mensaje en caso de recibir su llamada, y el mensaje mismo donde podemos programar un
mensaje de estado “Ocupado” o de “Te llamo después” de manera completamente automática.

Conclusiones

El diseño de una aplicación que utiliza Broadcast Receiver es muy interesante porque podemos
generar acciones o eventos al instante cuando se cumple una cierta condición sin importar que
proceso esté realizando el usuario en el dispositivo móvil porque el Broadcast Receiver ejecutara
esa acción por encima de cualquier otra, el claro ejemplo es esta aplicación que manda un
mensaje al número telefónico del que está entrando la llamada automáticamente sin que el
usuario tenga que preocuparse por redactar nuevamente el mensaje y mandárselo al número
telefónico que lo llamo, por eso son muy útil e importante el uso de los Broadcast Receivers en
una aplicación móvil.
Coordinación de Ingeniería en
Sistemas Computacionales

Bibliografía

REFERENCIAS

Salas, I. (27 de Agosto de 2014). programandoointentandolo.com. Obtenido de


https://programandoointentandolo.com/2014/08/broadcast-receiver-android.html

https://developer.android.com/guide/components/broadcasts

También podría gustarte