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:
- 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).
- 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
BroadcastReceivery sobrescribironReceive(). 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
- 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.
- 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.
- Los broadcasts entre aplicaciones presentan riesgos de seguridad; puedes configurar permisos para controlar quién envía y recibe.
6. Flujo de ejecución
- Instala ambas aplicaciones, SendDemo (emisor) y SendDemo2 (receptor), en el mismo dispositivo/emulador.
- En SendDemo, toca un botón para llamar a
sendBroadcastcon la accióncom.foxdevelop.MY_CUSTOM_BROADCAST. - El sistema distribuye el broadcast; cualquier BroadcastReceiver registrado para esa acción (MyBroadCastService en SendDemo2) activa su
onReceive. - SendDemo2 muestra un Toast:
Broadcast personalizado 22222 recibido.
Recepción de broadcasts entre aplicaciones en Android
Previous: Enviar difusión personalizada
Next: Broadcast ordenado