Recepción de broadcasts entre aplicaciones en Android

Este es un ejemplo de comunicación entre aplicaciones usando el BroadcastReceiver, uno de los cuatro componentes principales de Android. Utiliza dos proyectos independientes para demostrar: App1 envía una emisión personalizada y App2 la recibe.

1. Conceptos clave

El broadcast de Android es un mecanismo de publicación/suscripción de mensajes a nivel del sistema:

  1. Los broadcasts pueden enviarse y recibirse entre aplicaciones; puedes recibir tanto broadcasts personalizados como broadcasts del sistema (como arranque completado, cambios de batería, bloqueo de pantalla).
  2. Enfoque de prueba: crear 2 proyectos Android independientes
    • SendDemo: La aplicación emisora que envía un broadcast personalizado.
    • SendDemo2: La aplicación receptora que escucha el broadcast (este proyecto en la captura de pantalla).

2. Código del receptor (SendDemo2)

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadCastService extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Callback que se activa al recibir el broadcast; muestra un Toast
        Toast.makeText(context, "Broadcast personalizado 22222 recibido", Toast.LENGTH_LONG).show();
    }
}
Lenguaje del código: JavaScript (javascript)
  • Debe extender BroadcastReceiver y sobrescribir onReceive(). Este método se ejecuta automáticamente al recibir un broadcast.
  • Nota: No realices operaciones que consuman mucho tiempo en onReceive, ya que el ciclo de vida de un broadcast es muy corto.

3. Registro del Broadcast Receiver (dos métodos)

Método 1: Registro estático (registrar en AndroidManifest.xml; puede recibir aunque la app no esté en ejecución, pero con restricciones desde Android 8.0)
<receiver android:name=".MyBroadCastService">
    <intent-filter>
        <!-- Identificador de acción; el emisor debe usar exactamente la misma cadena de acción -->
        <action android:name="com.foxdevelop.MY_CUSTOM_BROADCAST"/>
    </intent-filter>
</receiver>
Lenguaje del código: HTML, XML (xml)

Cuando SendDemo envía el broadcast, la acción del Intent debe establecerse en com.foxdevelop.MY_CUSTOM_BROADCAST. Ambas acciones deben coincidir para que se reciba.

Método 2: Registro dinámico (registrar en código; solo funciona mientras la app se está ejecutando)
MyBroadCastService receiver = new MyBroadCastService();
IntentFilter filter = new IntentFilter("com.foxdevelop.MY_CUSTOM_BROADCAST");
registerReceiver(receiver, filter);
Lenguaje del código: JavaScript (javascript)

4. Código de envío de broadcast en SendDemo (emisor)

// Enviar un broadcast personalizado entre aplicaciones
Intent intent = new Intent("com.foxdevelop.MY_CUSTOM_BROADCAST");
sendBroadcast(intent);
Lenguaje del código: JavaScript (javascript)

5. Notas importantes

  1. Después de Android 8.0 (API 26): Los broadcasts implícitos personalizados registrados estáticamente están restringidos; muchas acciones personalizadas no se reciben con registro estático.
    • Soluciones: ① Usar registro dinámico; ② Incluir el nombre del paquete al enviar, usando un Intent explícito.
  2. La mayoría de los broadcasts del sistema (cambios de red, batería) aún se pueden recibir con normalidad, aunque algunos también tienen restricciones.
  3. Los broadcasts entre aplicaciones presentan riesgos de seguridad; puedes configurar permisos para controlar quién envía y recibe.

6. Flujo de ejecución

  1. Instala ambas aplicaciones, SendDemo (emisor) y SendDemo2 (receptor), en el mismo dispositivo/emulador.
  2. En SendDemo, toca un botón para llamar a sendBroadcast con la acción com.foxdevelop.MY_CUSTOM_BROADCAST.
  3. El sistema distribuye el broadcast; cualquier BroadcastReceiver registrado para esa acción (MyBroadCastService en SendDemo2) activa su onReceive.
  4. SendDemo2 muestra un Toast: Broadcast personalizado 22222 recibido.

Recepción de broadcasts entre aplicaciones en Android

Deja una respuesta

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