Esta é a forma de implementação da API antiga do Android (Android 7 e versões anteriores), usando BroadcastReceiver +
ConnectivityManager+NetworkInfopara identificar conexão e desconexão de rede.
1. Conceitos principais
- ConnectivityManager: Classe de serviço do sistema dedicada ao gerenciamento do status da conexão de rede.
- 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)
- Princípio: Quando ocorrem mudanças na rede, o sistema envia transmissões de rede. Dentro do callback
onReceivedoBroadcastReceiver, useConnectivityManagerpara 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.NetworkCallbackpara monitorar a rede. A abordagem antiga com transmissão + NetworkInfo não é mais recomendada.
Desvantagens do método antigo
- 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.
- A classe
NetworkInfoestá 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