1. Análisis y Diseño
de Software
Tema 4.5.2
Receptores de difusión
Carlos A. Iglesias <cif@gsi.dit.upm.es>
Departamento de Ingeniería de Sistemas Telemáticos
http://moodle.dit.upm.es
2. Leyenda
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Acceso a Datos 2
3. Temario
● 4.1 Introducción a Android [Gar10, cap1-2 ]
● 4.2 Desarrollo con Android [Gar10, cap3-5]
● 4.3 Interfaces de Usuario [Gar10, cap6]
● 4.4 Intenciones y Servicios [Gar10, cap7-8]
● 4.5 Acceso a Datos [Gar10, cap9-12]
– 4.5.1 Base de datos [Gar10, cap9]
– 4.5.2 Receptores de Difusión [Gar10,
cap10]
Acceso a Datos 3
4. Bibliografía
● Libro de texto:
– [Gar10] Learning Android, Marko Gargenta,
O'Reilly, 2010, Cap 10-12. Disponible en
http://ofps.oreilly.com/titles/9781449390501/
● Android Developers
– http://developer.android.com/reference/android/app/Service.html
– https://developer.android.com/reference/android/content/BroadcastReceiver.html
– http://developer.android.com/guide/topics/providers/content-providers.html
–
Acceso a Datos 4
5. Objetivos
● Aprender a utilizar componentes de
Android más elaborados, como los
receptores de difusión
● Entender el patrón de diseño publicador-
subscriptor, y la comunicación asíncrona
entre componentes
Acceso a Datos 5
6. Motivación
● El usuario tiene que lanzar el servicio.
– Nos gustaría que el sistema lanzara el
servicio cuando encendemos el teléfono
● También el servicio se conecta
periódicamente, incluso si no tenemos
conexión de red
– Nos gustaría que sólo nos conectáramos para
actualizar cuando hay conexión de red
Acceso a Datos 6
7. Receptores de difusión
● Sigue patrón
publish/subscribe
● El subscriptor tiene
un método que se
ejecuta cuando
recibe el evento
Desarrollo con Android 7
8. BroadCast Receivers
● Se subscriben a un 'evento' (Intención) en
AndroidManifest.xml
●Tiene un método onReceive() que es
invocado cada vez que surge dicho evento
● Podemos tener que declarar permisos para
que el usuario autorice que la aplicación
sea notificada de estos eventos
Acceso a Datos 8
9. Broadcast Receivers en
Yamba
● En nuestro caso:
– BootReceiver: se subscribe al evento de
reinicio del teléfono
– NetworkReceiver: se subscribe al evento de
conexión / desconexión de red
Acceso a Datos 9
16. Actualizar pantalla...
● Ahora mismo si estamos viendo el
TimelineActivity y llegan nuevos mensajes de
estado del servicio UpdateService, no se
refresca la pantalla
● Vamos a hacer que UpdateService notifique a
TimelineActivity cuando llegan nuevos
mensajes de estado
– Definimos una clase interna TimelineReceiver en
TimelineActivity que se subscribe a eventos de
UpdateService
Acceso a Datos 16
17. TimelineActivity (I)
Defino un nuevo evento
(personalizado) para la
aplicación:
NEW_STATUS
Acceso a Datos 17
18. TimelineActivity (II)
En vez de registrar el
receptor en el
manifiesto, lo hago de
forma programática
(registerReceiver)
Acceso a Datos 18
19. TimelineActivity (III)
Refrescamos el
objeto Cursor y el
objeto Adaptador
para que 're-
ejecuten' la consulta
cuando hay un
nuevo mensaje de
estado
Acceso a Datos 19
24. Resumen
● En este tema hemos aprendido a utilizar
un componente elaborado, los
subscriptores de difusión
● Hemos visto eventos del sistema y eventos
definidos por la aplicación
● También hemos visto cómo registrar
componentes de forma declarativa y de
forma programática
Acceso a Datos 24