Desarrollando en Android: Interacción entre clases mediante el método BroadcastReceiver

Tiempo estimado de lectura: 2 min.

Con la premisa que suelo aplicar a todo de “eso se tiene que poder hacer“, en su día, me puse manos a la obra hasta que dí con la solución.

En este punto la pregunta obvia es: ¿Cómo podemos enviar o recibir información desde una clase hacia otra en Android?

¿Te parece que lo veamos juntos? 🙂

Los intents

Los intents no son más que la “manera” de invocar una activitidad de Android. Incluso cuando definimos una nueva actividad en el fichero AndroidManifest.xml, podrás comprobar que se le asigna un intent:

<activity
    android:name=".activities.MiActividad1"
    android:label="@string/titulo_miactividad1"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:screenOrientation="portrait" >

    <intent-filter>
        <action android:name="android.intent.action.MiActividad1" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

En este ejemplo vamos a enviar datos desde un servicio a una actividad, pero esto puede aplicarse a cualquier clase lógica de Android.

Puedes utilizarlo para enviar datos desde una actividad a un fragmento, o desde un fragmento a otro, o desde una actividad a otra… según las necesidades que tengas.

Dicho esto, para inicializar un servicio debes poner en la lógica de la clase que lo arranque el siguiente código:

private void startService()
{
    Intent service = new Intent(this, nombre_de_la_clase.class);

    startService(service);
}

Después, tú decides desde donde dar comienzo a ese servicio haciendo una llamada a startService();.

Crea también el método stopService() con el siguiente código (recuerda hacer la llamada al método stopService(); cuando quieras parar el servicio que antes has arrancado):

private void stopService()
{
    Intent service = new Intent(this, nombre_de_la_clase.class);
    stopService(service);
}

La clase que se comporta a modo de servicio es una clase que extiende de Service, desde élla nuestra intención es enviar información y que pueda recojerla cualquier clase. Para hacerlo, en la clase-servicio nos dirigimos al/a los método(s) que envían los valores y escribimos lo siguiente:

Intent i = new Intent("android.intent.action.NOMBRE_DEL_INTENT").putExtra("valor1", "aaa");
i.putExtra("valor2", "bbb");
sendBroadcast(i);

Con esto enviamos las variables valor1, con contenido “aaa”, y valor2, con contenido “bbb”, a las clases que quieran recoger esos valores.

Los Broadcast Receivers

Desde cualquier clase definimos el método BroadcastReceiver, que no deja de ser un receptor de eventos que genera el S.O. Android.

Dentro del BroadcastReceiver, el método onReceive recoge esos valores que hemos enviado desde nuestro servicio:

private BroadcastReceiver mReceiver = new BroadcastReceiver(
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        //extraemos los valores desde nuestro intent
        String valor1 = intent.getStringExtra("valor1");
        String valor2 = intent.getStringExtra("valor2");
    }
};

Ten en cuenta que para iniciar el receptor de información debes llamarle desde un método onCreate() en la lógica de la clase:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    intentFilter = new IntentFilter("android.intent.action.NOMBRE_DEL_INTENT");
    registerReceiver(mReceiver, intentFilter);
}

Para pararlo debes invocar esta sentencia desde el método onDestroy() u onPause():

@Override
public void onDestroy()
{
    super.onDestroy();

    unregisterReceiver(mReceiver);
}

Con esto ya te he enseñado a pescar 😉 , si tienes cualquier problema o sugerencia ¡no dudes en contactarme!

¡Yeah! 🙂

Saúl Cintero.

Publicado por

Saúl Cintero

Saúl Cintero

Soy feliz diseñando y desarrollando soluciones para cada necesidad.En los últimos tiempos he centrado mi atención en Java y disfruto desarrollando productos tanto para escritorio como para dispositivos móviles.

2 comentarios en “Desarrollando en Android: Interacción entre clases mediante el método BroadcastReceiver”

  1. Saludos,
    Saul sera que me puedes facilitar un ejemplo donde tenga implementado, es que lo necesito para comunicar una actividad con un fragment, te lo agradezco

  2. Hola!
    Hace ya un buen de tiempo que se creo este tema, pero apenas me encuentro con esta duda, con tu método es posible de pasar una variable que contiene un elemento de una librería hacia otra actividad y/o un fragmento?, He buscado por todos lados y no llego a la respuesta.
    si llegas a contestar mi pregunta te lo agradecería mucho, sino también.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload CAPTCHA.