Monitoramento de transmissão de conexão / desconexão de rede Android

Esta é a forma de implementação da API antiga do Android (Android 7 e versões anteriores), usando BroadcastReceiver + ConnectivityManager + NetworkInfo para identificar conexão e desconexão de rede.

1. Conceitos principais

  1. ConnectivityManager: Classe de serviço do sistema dedicada ao gerenciamento do status da conexão de rede.
  2. Permissões: É necessário adicionar a permissão de estado de rede no arquivo AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Code language: HTML, XML (xml)
  1. Princípio: Quando ocorrem mudanças na rede, o sistema envia transmissões de rede. Dentro do callback onReceive do BroadcastReceiver, use ConnectivityManager para recuperar as informações atuais da rede e determinar se ela está conectada ou desconectada.

2. Código completo do onReceive

public void onReceive(Context context, Intent intent) {
    // Obter serviço de sistema de gerenciamento de rede
    ConnectivityManager connectivityManager =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    // Obter informações da rede ativa (API depreciada)
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo != null) {
        if (networkInfo.isAvailable()) {
            Toast.makeText(context, "Rede conectada", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(context, "Rede desconectada", Toast.LENGTH_LONG).show();
        }
    } else {
        // networkInfo é null, sem rede
        Toast.makeText(context, "Rede desconectada", Toast.LENGTH_LONG).show();
    }
}
Code language: JavaScript (javascript)

3. Aviso importante (depreciação)

getActiveNetworkInfo() e NetworkInfo foram depreciados a partir do Android 10 (API29)

Versões mais novas do Android recomendam o uso do callback ConnectivityManager.NetworkCallback para monitorar a rede. A abordagem antiga com transmissão + NetworkInfo não é mais recomendada.

Desvantagens do método antigo

  1. Após o Android 8.0 (API26), transmissões de estado de rede registradas estaticamente são restritas. O registro estático não recebe transmissões de mudança de rede, sendo necessário registrar o receptor de forma dinâmica.
  2. A classe NetworkInfo está depreciada. Chamadas diretas em versões novas geram avisos ou falham.

4. Registro dinâmico do BroadcastReceiver

// Definir receptor de transmissão
public class NetReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Colar aqui o código de verificação de rede acima
    }
}
// Registro dinâmico dentro da Activity
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
NetReceiver receiver = new NetReceiver();
registerReceiver(receiver, filter);
Code language: PHP (php)

Monitoramento de transmissão de conexão / desconexão de rede Android

Deixe um comentário

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