Um exemplo – Receber transmissões do sistema

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

  1. Crie uma nova classe que herda de BroadcastReceiver
  2. Sobrescreva o método onReceive(Context context, Intent intent)
  3. 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)

Deixe um comentário

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