Recebimento de broadcasts entre aplicativos no Android

Este é um exemplo de comunicação entre aplicativos usando o BroadcastReceiver, um dos quatro componentes principais do Android. Ele utiliza dois projetos independentes para demonstrar: o App1 envia um broadcast personalizado e o App2 o recebe.

1. Conceitos principais

O broadcast do Android é um mecanismo de publicação/assinatura de mensagens em nível de sistema:

  1. Os broadcasts podem ser enviados e recebidos entre aplicativos; você pode receber tanto broadcasts personalizados quanto broadcasts do sistema (como inicialização concluída, mudanças de bateria, bloqueio de tela).
  2. Abordagem de teste: criar 2 projetos Android independentes
    • SendDemo: O app emissor que envia um broadcast personalizado.
    • SendDemo2: O app receptor que escuta o broadcast (este projeto na captura de tela).

2. Código do 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 acionado ao receber o broadcast; exibe um Toast
        Toast.makeText(context, "Broadcast personalizado 22222 recebido", Toast.LENGTH_LONG).show();
    }
}
Code language: JavaScript (javascript)
  • Deve estender BroadcastReceiver e sobrescrever onReceive(). Este método é executado automaticamente quando um broadcast é recebido.
  • Nota: Não execute operações demoradas em onReceive, pois o ciclo de vida de um broadcast é muito curto.

3. Registro do Broadcast Receiver (dois métodos)

Método 1: Registro estático (registrar no AndroidManifest.xml; pode receber mesmo se o app não estiver rodando, mas com restrições após o Android 8.0)
<receiver android:name=".MyBroadCastService">
    <intent-filter>
        <!-- Identificador de ação; o emissor deve usar exatamente a mesma string de ação -->
        <action android:name="com.foxdevelop.MY_CUSTOM_BROADCAST"/>
    </intent-filter>
</receiver>
Code language: HTML, XML (xml)

Quando o SendDemo envia o broadcast, a ação do Intent deve ser definida como com.foxdevelop.MY_CUSTOM_BROADCAST. As duas ações devem coincidir para que o broadcast seja recebido.

Método 2: Registro dinâmico (registrar no código; funciona apenas enquanto o app estiver em execução)
MyBroadCastService receiver = new MyBroadCastService();
IntentFilter filter = new IntentFilter("com.foxdevelop.MY_CUSTOM_BROADCAST");
registerReceiver(receiver, filter);
Code language: JavaScript (javascript)

4. Código de envio de broadcast no SendDemo (emissor)

// Enviar um broadcast personalizado entre aplicativos
Intent intent = new Intent("com.foxdevelop.MY_CUSTOM_BROADCAST");
sendBroadcast(intent);
Code language: JavaScript (javascript)

5. Observações importantes

  1. Após o Android 8.0 (API 26): Broadcasts implícitos personalizados com registro estático são restritos; muitas ações personalizadas não são recebidas com registro estático.
    • Soluções: ① Usar registro dinâmico; ② Incluir o nome do pacote ao enviar, usando um Intent explícito.
  2. A maioria dos broadcasts do sistema (mudanças de rede, bateria) ainda pode ser recebida normalmente, embora alguns também tenham restrições.
  3. Broadcasts entre aplicativos apresentam riscos de segurança; você pode definir permissões para controlar o envio e o recebimento.

6. Fluxo de execução

  1. Instale os dois aplicativos, SendDemo (emissor) e SendDemo2 (receptor), no mesmo dispositivo/emulador.
  2. No SendDemo, toque em um botão para chamar sendBroadcast com a ação com.foxdevelop.MY_CUSTOM_BROADCAST.
  3. O sistema distribui o broadcast; qualquer BroadcastReceiver registrado para essa ação (MyBroadCastService no SendDemo2) aciona seu onReceive.
  4. O SendDemo2 exibe um Toast: Broadcast personalizado 22222 recebido.

Recebimento de broadcasts entre aplicativos no Android

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *