Hasta ahora hemos visto cómo los receptores de anuncios nos permitían reaccionar ante ciertas circunstancias que ocurrían en el sistema (batería baja, llamada entrante, etc.). En este apartado vamos ver lo sencillo que resulta crear nuestros propios anuncios broadcast y recogerlos desde cualquier componente de nuestra aplicación. Además estos anuncios también podrán ser recogidos desde otras aplicaciones.

En un apartado anterior hemos visto como asociar anuncios broadcast a receptores de anuncio por medio de AndroidManifest.xml. En este apartado vamos a realizar la misma tarea utilizando Java. El programador puede escoger uno u otro modo según le convenga. 

 

Ejercicio paso a paso: Creación de un nuevo anuncio broadcast

 

En el ejercicio anterior hemos creado un servicio desde una actividad para realizar una operación matemática. Una vez que el servicio ha concluido su trabajo queríamos que avisara a la actividad y le devolviera el valor resultante. En este ejercicio realizaremos este trabajo por medio de un anuncio broadcast.

1.      Abre el proyecto IntentServicecreado en el apartado anterior.

2.      Añade el siguiente código dentro de la clase MainActivity:

public classReceptorOperacion extends BroadcastReceiver {

      public static final String ACTION_RESP=  
     "com.example.intentservice.intent.action.RESPUESTA_OPERACION"
;

      @Override

      public void onReceive(Context context, Intent intent) {

         Double res = intent.getDoubleExtra("resultado", 0.0);

         salida.append(" "+ res);

      }

   }
 

Esta nueva clase solo va a utilizarse en esta actividad por lo que puede ser definida dentro de la clase MainActivity, en lugar de en un fichero independiente. Se trata de un receptor broadcast, que cada vez que llegue un nuevo anuncio, leerá un valor enviado en el extra "resultado", y lo añadirá al TextView salida.

3.      Añade las siguientes líneas al método onCreate()

      IntentFilter filtro = new
                      IntentFilter(ReceptorOperacion.ACTION_RESP);

      filtro.addCategory(Intent.CATEGORY_DEFAULT);

      registerReceiver(new ReceptorOperacion(), filtro);
 

Con este código hemos asociado un anuncio broadcast a nuestro receptor de anuncios. Como vimos en otro apartado esta tarea también puede realizarse por medio de AndroidManifest.xml. El programador puede escoger uno u otro modo según le convenga. Al tratarse de un anuncio para una comunicación interna a nuestra aplicación, parece más conveniente realizarlo así que publicarlo por AndroidManifest.

4.      Nos queda lanzar el anuncio broadcast. Para ello añade las siguiente línea  de IntentServiceOperacion.onHandleIntent ():

MainActivity.salida.append(n*n + "\n");          

por:

      Intent i = new Intent();

      i.setAction(ReceptorOperacion.ACTION_RESP);

      i.addCategory(Intent.CATEGORY_DEFAULT);

      i.putExtra("resultado", n*n);

      sendBroadcast(i);

5.      Verifica que la aplicación funciona perfectamente. Pulsa repetidas veces el botón y verifica cómo esta no se bloquea mientras se calculan las operaciones. Advierte cómo, aunque se pulse tres veces seguidas, no comienzan las tres operaciones a la vez. Estas serán realizadas de una en una, de manera que irán apareciendo los resultados a intervalos de 5 segundos.

6.      Modifica el tiempo de retardo para que este sean 25 seg. (sleep(25000)).Ejecuta de nuevo la aplicación y observa cómo el sistema no nos muestra ningún error.