Sobes.tech
Junior

¿Qué es BroadcastReceiver en Android?

sobes.tech AI

Respuesta de la IA

Este es un componente que responde a mensajes broadcast del sistema o del usuario. No tiene interfaz de usuario y está diseñado para realizar operaciones en segundo plano en respuesta a eventos específicos.

Características principales:

  • Responde a intenciones (Intents) con una acción (action) específica.
  • Componente de corta duración, su método onReceive() se ejecuta en un corto período.
  • No está destinado a operaciones prolongadas. Si se requiere trabajo prolongado, se debe iniciar un Service desde onReceive().
  • Puede registrarse de forma estática en el manifiesto o dinámicamente en el código.

Ejemplos de uso:

  • Responder a cambios en el estado de la red (android.net.conn.CONNECTIVITY_CHANGE).
  • Responder a la carga del sistema (android.intent.action.BOOT_COMPLETED).
  • Procesar SMS entrantes.
  • Recibir mensajes personalizados enviados por otros componentes de la aplicación u otras aplicaciones.

Registro en el manifiesto:

<receiver android:name=".MyBroadcastReceiver"
          android:exported="true"> // exported="true" para que otras aplicaciones puedan enviar intents
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Registro en el código:

// En una Activity o Service
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);

// En onDestroy() o onStop() - es importante cancelar el registro!
unregisterReceiver(receiver);

Clase BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Aquí se ejecuta el código al recibir el Intent
        // Por ejemplo:
        if ("com.example.MY_CUSTOM_ACTION".equals(intent.getAction())) {
            Toast.makeText(context, "¡Acción personalizada recibida!", Toast.LENGTH_SHORT).show();
        }
    }
}