Um exemplo – Receber transmissões do sistema
I. Conceitos básicos de transmissões (Broadcast)
1. O que são transmissões do sistema
- O Android possui muitas transmissões de nível de sistema nativas, para avisar sobre alterações no estado do sistema.
- Transmissões comuns do sistema:
- Bateria fraca / mudança no nível da bateria
- Inicialização concluída (
BOOT_COMPLETED) - Mudança no estado da rede (
CONNECTIVITY_CHANGE) - Alternância do modo avião
- Mudança de horário / fuso horário
2. Função do receptor de transmissões
- O aplicativo cadastra um receptor de transmissões para escutar as transmissões de interesse.
- Quando uma transmissão chega, o sistema chama automaticamente o método
onReceive()do receptor. - Escreva a lógica de negócio dentro do método
onReceive().
II. Duas formas de cadastrar transmissões
| Item de comparação | Cadastro dinâmico (cadastro por código) | Cadastro estático (cadastro no Manifest) |
|---|---|---|
| Local do cadastro | Dentro de componentes como Activity / Service | AndroidManifest.xml |
| Ciclo de vida | Vinculado ao componente onde foi cadastrado | Independente dos componentes; consegue receber transmissões mesmo com o app não iniciado |
| Flexibilidade | Alta, pode cadastrar ou remover o cadastro a qualquer momento | Baixa, definido no momento da instalação |
| Cenários de uso | Transmissões que precisam reconhecer o ciclo de vida do componente | Transmissões globais, execução na inicialização, etc. |
| Restrições em versões novas | Sem restrições especiais | Android 8.0+ possui muitas limitações para transmissões implícitas |
Importante: O cadastro estático não é permitido para a transmissão
CONNECTIVITY_CHANGE(mudança de rede) no Android 7.0 ou superior. É obrigatório usar o cadastro dinâmico.
III. Criar um receptor de transmissões
Passos básicos
- Crie uma nova classe que herda de
BroadcastReceiver - Sobrescreva o método
onReceive(Context context, Intent intent) - Processe a lógica da transmissão recebida dentro de
onReceive()
Código
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Processar a lógica da transmissão
}
}Code language: PHP (php)
IV. Fluxo completo do cadastro dinâmico
1. Definir variáveis de membro
private NetworkChangeReceiver networkChangeReceiver;
private IntentFilter intentFilter;Code language: PHP (php)
2. Realizar o cadastro dentro de onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
networkChangeReceiver = new NetworkChangeReceiver();
intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(networkChangeReceiver, intentFilter);
}Code language: JavaScript (javascript)
3. Remover o cadastro em onDestroy() (Obrigatório!)
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}Code language: CSS (css)
4. Definir a classe interna do receptor
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "A rede foi alterada", Toast.LENGTH_LONG).show();
}
}Code language: JavaScript (javascript)