Tema 4 5_2_receptores_difusion

25
Análisis y Diseño de Software Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es Carlos A. Iglesias <[email protected]> Tema 4.5.2 Receptores de difusión

description

Android. Receptores de difusión

Transcript of Tema 4 5_2_receptores_difusion

Page 1: Tema 4 5_2_receptores_difusion

Análisis y Diseño de Software

Departamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.es

Carlos A. Iglesias <[email protected]>

Tema 4.5.2Receptores de difusión

Page 2: Tema 4 5_2_receptores_difusion

Acceso a Datos 2

Teoría

Ejercicio práctico en el ordenador

Ampliación de conocimientos

Lectura / Vídeo / Podcast

Práctica libre / Experimentación

Leyenda

Page 3: Tema 4 5_2_receptores_difusion

Acceso a Datos 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]

Page 4: Tema 4 5_2_receptores_difusion

Acceso a Datos 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

Page 5: Tema 4 5_2_receptores_difusion

Acceso a Datos 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

Page 6: Tema 4 5_2_receptores_difusion

Acceso a Datos 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

Page 7: Tema 4 5_2_receptores_difusion

Desarrollo con Android 7

Receptores de difusión

● Sigue patrón publish/subscribe

● El subscriptor tiene un método que se ejecuta cuando recibe el evento

Page 8: Tema 4 5_2_receptores_difusion

Acceso a Datos 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

Page 9: Tema 4 5_2_receptores_difusion

Acceso a Datos 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

Page 10: Tema 4 5_2_receptores_difusion

Acceso a Datos 10

AndroidManifest.xml

Page 11: Tema 4 5_2_receptores_difusion

Acceso a Datos 11

BootReceiver

Page 12: Tema 4 5_2_receptores_difusion

Acceso a Datos 12

BootReceiver v2

● Puede ser incómodo que siempre se nos lance el servicio... añadimos una preferencia

Page 13: Tema 4 5_2_receptores_difusion

Acceso a Datos 13

Preferencias (I)xml/prefs.xml

Page 14: Tema 4 5_2_receptores_difusion

Acceso a Datos 14

Preferencias (II)

● Las opciones de ListPreference las añadimos en values/arrays.xml

Page 15: Tema 4 5_2_receptores_difusion

Acceso a Datos 15

NetworkReceiver

Page 16: Tema 4 5_2_receptores_difusion

Acceso a Datos 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

Page 17: Tema 4 5_2_receptores_difusion

Acceso a Datos 17

TimelineActivity (I)

Defino un nuevo evento (personalizado) para la

aplicación: NEW_STATUS

Page 18: Tema 4 5_2_receptores_difusion

Acceso a Datos 18

TimelineActivity (II)

En vez de registrar el receptor en el

manifiesto, lo hago de forma programática (registerReceiver)

Page 19: Tema 4 5_2_receptores_difusion

Acceso a Datos 19

TimelineActivity (III)

Refrescamos el objeto Cursor y el objeto Adaptador

para que 're-ejecuten' la consulta

cuando hay un nuevo mensaje de

estado

Page 20: Tema 4 5_2_receptores_difusion

Acceso a Datos 20

UpdaterService (I)

Page 21: Tema 4 5_2_receptores_difusion

Acceso a Datos 21

UpdaterService (II)

Page 22: Tema 4 5_2_receptores_difusion

Acceso a Datos 22

UpdaterService (III)

Page 23: Tema 4 5_2_receptores_difusion

Acceso a Datos 23

Lo que llevamos hecho...

Page 24: Tema 4 5_2_receptores_difusion

Acceso a Datos 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

Page 25: Tema 4 5_2_receptores_difusion

Acceso a Datos 25

¿Preguntas?