Sobes.tech
Junior

O que é um BroadcastReceiver no Android?

sobes.tech IA

Resposta da IA

Este é um componente que responde a mensagens broadcast do sistema ou do utilizador. Não possui interface de utilizador e destina-se a executar operações em segundo plano em resposta a eventos específicos.

Características principais:

  • Responde a intenções (Intents) com uma ação (action) específica.
  • Componente de curta duração, o seu método onReceive() é executado durante um curto período.
  • Não é destinado a operações longas. Se for necessária uma operação prolongada, deve-se iniciar um Service a partir de onReceive().
  • Pode ser registado de forma estática no manifesto ou dinamicamente no código.

Exemplos de utilização:

  • Responder a alterações no estado da rede (android.net.conn.CONNECTIVITY_CHANGE).
  • Responder ao arranque do sistema (android.intent.action.BOOT_COMPLETED).
  • Processar SMS recebidos.
  • Receber mensagens personalizadas enviadas por outros componentes da aplicação ou por outras aplicações.

Registo no manifesto:

<receiver android:name=".MyBroadcastReceiver"
          android:exported="true"> // exported="true" para que outras aplicações possam enviar intents
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Registo no código:

// Em uma Activity ou Service
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);

// Em onDestroy() ou onStop() - é importante cancelar o registo!
unregisterReceiver(receiver);

Classe BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Aqui é executado o código ao receber o Intent
        // Por exemplo:
        if ("com.example.MY_CUSTOM_ACTION".equals(intent.getAction())) {
            Toast.makeText(context, "Ação personalizada recebida!", Toast.LENGTH_SHORT).show();
        }
    }
}