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
- Broadcast padrão sendBroadcast() Broadcast assíncrono. Todos os receptores recebem quase ao mesmo tempo, sem ordem e não pode ser interrompido.
- 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
- Caminho incorreto do
android:nameda 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
- Nome do pacote inconsistente: applicationId no build.gradle não combina com o nome package do manifesto
- 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)
- Problema de compilação: Falha na compilação do projeto, arquivo class não gerado; limpe o projeto e reconstrua (Build -> Clean Project)
- Questão de caixa:
MainactivityeMainActivitysão classes diferentes, Android diferencia letras maiúsculas e minúsculas
Passos simples para diagnóstico
- 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> - Segure Ctrl e clique em
.MainActivitypara testar se navega até o código - Não navega → Altere
android:namepara o nome completo correto da classe - 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