Junior
Como conectar um BroadcastReceiver para receber mensagens no Android?
sobes.tech IA
Resposta da IA
Existem dois métodos principais:
-
Registo dinâmico:
- Regista-se e cancela-se programaticamente no código.
- Dura enquanto o objeto que o registou estiver ativo.
- Usado para eventos que não precisam de ser recebidos constantemente ou quando a aplicação não está ativa (por exemplo, ao alterar a orientação, nível de bateria).
// Em Activity ou Fragment private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Processamento da mensagem recebida intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Processamento da alteração da bateria } // Outras ações } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Outras ações } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Registo estático:
- Declarado no ficheiro de manifesto (
AndroidManifest.xml). - Dura mais do que o ciclo de vida do componente que o registou. Pode receber mensagens mesmo quando a aplicação não está ativa (para algumas ações, com limitações nas últimas versões do Android).
- Usado para eventos do sistema que precisam de ser recebidos constantemente (por exemplo, ao ligar o 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" /> <!-- Outras ações --> </intent-filter> </receiver> ... </application> </manifest>// Classe BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Processamento da mensagem recebida intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Processamento ao terminar o arranque } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Processamento da alteração do modo avião } // Outras ações } } } } - Declarado no ficheiro de manifesto (