Introducción
En una entrada anterior vimos como hacer que nuestra aplicación se suscriba a ciertos eventos que Android produce, por ejemplo cuando se inicia el dispositivo. En esta entrada vamos a ver como podemos usar el sistema de mensajes dentro de nuestra aplicación. De forma similar se podrían usar este tipo de mensajes entre diferentes aplicaciones.
Como los mensajes que veremos están diseñados para ser usados dentro de nuestra aplicación, también asignaremos permisos para que sólo los podamos utilizar dentro de aplicación que estemos desarrollando, siempre que no nos interese que los puedan usar otros programas.
Vamos a suponer que tenemos un servicio que esta consultando el cambio de datos cada cierto tiempo, puede ser las coordenadas GPS, algún dato de internet, por ejemplo entradas de twitter, etc... y nos interesa que cuando se reciva un nuevo dato nuestro servicio avise de este nuevo dato para que se refresque la pantalla de usuario.
Escuchando los mensajes
Lo primero que tenemos que hacer es, como en el caso anterior, es crear una clase que se encargará de recibir el mensaje. Debemos hacer que herede de la clase BroadcastReceiver
, de la siguiente manera:
...
class DataReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Accion a realizar. Por ejemplo, leer datos de la BB.DD.
//y actualizar el adapter.
cursor.requery();
adapter.notifyDataSetChanged();
Log.d("Nuevos Datos Recividos");
}
}
...
Ya tenemos listo nuestra clase que se encargará de recoger el mensaje, pero falta indicar que tipo de mensaje queremos que procese, al contrario que en el ejemplo del post anterior, donde se indicaba en el archivo de Manifest, en este caso lo indicaremos mediante código, de la siguiente forma:
// DataActivity.java
// Activity que se encarga de mostrar los datos por pantalla.
private DataReceiver receiver;
private IntentFilter filter;
...
protected void onCreate(Bundle savedInstanceState){
super.onCreate( savedInstanceState );
filter = new IntentFilter( "com.acme.NEW_DATA" );
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(receiver, filter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
En este código podemos ver como podemos suscribirnos y desuscribirnos a un mensaje. Como queremos que se actualice la pantalla, cuando esta pierde el foco, no nos interesa seguir recibiendo el mensaje, por lo que quitamos las suscripción.
Enviando Mensajes
Ya tenemos la parte de nuestro aplicación que captura el mensaje y realiza las tareas que nosotros queremos. Ahora solo nos falta realizar la parte del publisher, que se encargará de enviar el mensaje que nuevos datos se han recibido.
intent = new Intent("com.acme.NEW_DATA");
intent.putExtra(NEW_DATA_EXTRA_COUNT, newDataCount);
this.sendBroadcast(intent);
Como vemos para mandar el mensaje utilizarmos sendBroadcast, que pertenece a la clase Context, de la cual heredan Service o Activity. En el ejemplo se puede ver como crear un nuevo Intent al que se le indica el nombre del mensaje que enviamos en el constructor. Después indicamos información extra que se enviará junto al mensaje, y por último enviamos el mensaje.
Con esto ya tenemos el sistema avisos en nuestra aplicación. En una próximo post veremos como dar permisos, ya que puede haber mensajes que no nos interese que se puedan usar fuera de nuestra aplicación, así podremos restringuir que aplicación los puede enviar y cual los puede recibir.
0 comentarios:
Publicar un comentario