Enviar broadcast personalizado

1. Receptor de broadcast personalizado MyBroadcastReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Recebemos nosso broadcast personalizado", Toast.LENGTH_LONG).show();
    }
}
Code language: JavaScript (javascript)

2. Registrar receptor no AndroidManifest.xml (arquivo de manifesto)

Adicione dentro da tag <application>:

<receiver
    android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.foxdevelop.www.broadcastdemo.MY_BROADCAST" />
    </intent-filter>
</receiver>
Code language: HTML, XML (xml)

Ponto essencial: O nome da action. A string Intent usada ao enviar o broadcast depois precisa ser exatamente igual a esse valor

3. activity_main.xml Layout (botão)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/btn_send"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Enviar broadcast"/>
</LinearLayout>
Code language: HTML, XML (xml)

4. MainActivity.java Activity principal (enviar broadcast ao clicar no botão)

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.btn_send);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // A string action deve ser idêntica à action definida no manifesto
                Intent intent = new Intent("cn.bamn.www.broadcastdemo.MY_BROADCAST");
                sendBroadcast(intent);
            }
        });
    }
}
Code language: JavaScript (javascript)

Broadcast padrão vs Broadcast ordenado

  1. Broadcast padrão sendBroadcast() Broadcast assíncrono. Todos os receptores recebem quase ao mesmo tempo, sem ordem e não pode ser interrompido.
  2. Broadcast ordenado sendOrderedBroadcast() Os receptores recebem o broadcast por ordem de prioridade. Receptores anteriores podem chamar abortBroadcast() para interromper o broadcast, e os receptores seguintes não o receberão.

Erro da imagem: Activity class ...MainActivity does not exist

Significado do erro: O sistema não consegue encontrar a classe MainActivity

Causas comuns

  1. Caminho incorreto do android:name da Activity no AndroidManifest.xml (mais frequente)
    • Nome do pacote incompatível com nome da classe, erro de caixa alta/baixa
    • Forma de escrita: android:name=".MainActivity", o ponto . significa dentro do pacote da aplicação atual
    • Método de validação: Segure Ctrl e clique no nome da classe na IDE. Se conseguir ir até a classe MainActivity, o caminho está correto
  2. Nome do pacote inconsistente: applicationId no build.gradle não combina com o nome package do manifesto
  3. Arquivo de classe faltando: MainActivity.java excluído / nome de arquivo errado (O nome da classe Java deve ser exatamente igual ao nome do arquivo, diferencia maiúsculas e minúsculas)
  4. Problema de compilação: Falha na compilação do projeto, arquivo class não gerado; limpe o projeto e reconstrua (Build -> Clean Project)
  5. Questão de caixa: Mainactivity e MainActivity são classes diferentes, Android diferencia letras maiúsculas e minúsculas

Passos simples para diagnóstico

  1. Abra o AndroidManifest.xml e localize o nó da activity de inicialização<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
  2. Segure Ctrl e clique em .MainActivity para testar se navega até o código
  3. Não navega → Altere android:name para o nome completo correto da classe
  4. Consegue navegar → Execute Clean Project, reconstrua e reinstale o APK

Complemento: Atenção para versões novas do Android (API26+): O registro estático de broadcasts implícitos tem várias restrições. Muitos broadcasts implícitos do sistema não permitem registro estático. Porém, broadcasts implícitos com action personalizada não têm essa limitação e funcionam normalmente. Este exemplo pode ser executado diretamente.

Enviar broadcast personalizado

Deixe um comentário

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