Enviar y recibir acciones con BroadcastReceiver en Android

Hace unas semanas hablábamos sobre las notificaciones tipo push con la nueva versión del servicio de Google. Vimos como activar el servicio en Google, la parte servidor para enviar los mensajes a los usuarios y como recibirlos y notificarlos en el dispositivo. ¿Pero que pasa una vez recibidos? ¿Como transmitimos ese evento al resto de nuestra app?


La respuesta es muy sencilla con los broadcastreceiver. Estos no son más que capturadores de acciones. Existen ya algunos definidos en el sistema como pueden ser una llamada entrante o un mensaje de texto. En nuestra aplicación podríamos capturar esas acciones y tratarlas de la forma que a nosotros mejor nos conviniera.

Voy a explicarlo basándome en el artículo de las notificaciones push. Después de recibir y notificar un mensaje push, no hicimos nada más. Simplemente le mostramos al usuario el aviso pero en la aplicación no hacemos nada más. ¿Que pasaría si el usuario está mirando una lista con todas las notificaciones que ya teníamos y en ese momento llega un nuevo aviso? 

Para estos casos tenemos los bradcastreceiver, este estará escuchando hasta que llegue una determinada acción y cuando eso ocurra le dirá a la lista o a quien sea, que ha llegado un nuevo aviso y debe actualizarse.

Enviar la acción que luego recogeremos es muy sencillo. Simplemente debemos ejecutar lo siguiente:

private void sendBroadCast(Context context) {   
        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction("NOMBRE_DE_NUESTRA_ACTION");         
        broadcastIntent.putExtra("parameter", "value");         
        context.sendBroadcast(broadcastIntent);         
}

Este método tan sencillo lo podéis llamar desde el método notificarMensaje del artículo dedicado al envío de notificaciones push. Simplemente creamos un Intent, seteamos el nombre de su action, si queréis podéis incluir algún parámetro con putExtra y por último lo enviamos con el método sendBroadcast de Context.

Y ahora vamos a definir el broadcastreceiver que será el encargado de estar escuchando cuando esta acción se envíe y ejecutar lo que le digamos. Para ello vais a una de las Activitys de vuestra aplicación, donde tengáis una lista con las notificaciones o el número de ellas y definimos el broadcastreceiver así:

private IntentFilter myFilter;
 
private BroadcastReceiver myReceiver = new BroadcastReceiver() {   
        @Override
        public void onReceive(Context context, Intent intent) {         
           String myParam = intent.getExtras().getString("parameter"); 
            if (myParam != null) {                
                //Aquí ejecutais el método que necesiteis, por ejemplo actualizar //el número de notificaciones recibidas

            }
        }
    };

El BroadcasReceiver estará a la espera de nuestra action y de ejecutar lo que le digamos. Si queréis, también podéis capturar los parámetros enviados y utilizarlos como vosotros necesitéis.

@Override
protected void onPause() {         
        unregisterReceiver(myReceiver);
        super.onPause();
}
     

@Override
protected void onResume() {
        super.onResume();
        registerReceiver(myReceiver, myFilter);
}

En el onResume debemos registrar nuestro receiver para que realmente esté a la espera del action y en el onPause debemos eliminar este registro.

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  
 
        myFilter = new IntentFilter();
        myFilter.addAction("NOMBRE_DE_NUESTRA_ACTION");
}

Por último, al crearse nuestra Activity también instanciamos un IntentFilter que le dirá a nuestro broadcastreceiver cual es el nombre de la acción que debemos recoger, fijaros como se pasó como parámetro en el onResume al método registerReceiver.

Y con este poquito código ya hemos creado nuestro broadcastreceiver. Si habéis implementado un método para contar las notificaciones y enviáis notificaciones push a vuestra app, empezará a actualizarse el número de ellas. Como veis es una forma muy rápida y sencilla de tener actualizada todas las partes de vuestra aplicación.

Comments are closed.