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:
- 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).
- 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
BroadcastReceivere sobrescreveronReceive(). 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
- 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.
- A maioria dos broadcasts do sistema (mudanças de rede, bateria) ainda pode ser recebida normalmente, embora alguns também tenham restrições.
- 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
- Instale os dois aplicativos, SendDemo (emissor) e SendDemo2 (receptor), no mesmo dispositivo/emulador.
- No SendDemo, toque em um botão para chamar
sendBroadcastcom a açãocom.foxdevelop.MY_CUSTOM_BROADCAST. - O sistema distribui o broadcast; qualquer BroadcastReceiver registrado para essa ação (MyBroadCastService no SendDemo2) aciona seu
onReceive. - O SendDemo2 exibe um Toast:
Broadcast personalizado 22222 recebido.
Recebimento de broadcasts entre aplicativos no Android
Previous: Enviar broadcast personalizado
Next: Broadcast ordenado