Junior
¿Cómo conectar un BroadcastReceiver para recibir mensajes en Android?
sobes.tech AI
Respuesta de la IA
Existen dos métodos principales:
-
Registro dinámico:
- Se registra y cancela programáticamente en el código.
- Dura mientras el objeto que lo registró esté activo.
- Se usa para eventos que no necesitan ser recibidos constantemente o cuando la aplicación no está activa (por ejemplo, al cambiar la orientación, nivel de batería).
// En Activity o Fragment private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Procesamiento del mensaje recibido intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Procesamiento del cambio de batería } // Otras acciones } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Otras acciones } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Registro estático:
- Se declara en el archivo de manifiesto (
AndroidManifest.xml). - Dura más que el ciclo de vida del componente que lo registró. Puede recibir mensajes incluso cuando la aplicación no está activa (para algunas acciones, con limitaciones en las últimas versiones de Android).
- Se usa para eventos del sistema que necesitan ser recibidos constantemente (por ejemplo, al encender el dispositivo).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Importante para Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Otras acciones --> </intent-filter> </receiver> ... </application> </manifest>// Clase BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Procesamiento del mensaje recibido intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Procesamiento al completar el arranque } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Procesamiento del cambio en modo avión } // Otras acciones } } } } - Se declara en el archivo de manifiesto (