Em outubro de 2018, a resposta aceita está obsoleta.
getType()
, e os próprios tipos, agora estão obsoletos no nível 28 da API. No Javadoc:
Os chamadores devem mudar para verificar NetworkCapabilities # hasTransport em vez de uma das constantes NetworkCapabilities # TRANSPORT *
Para usar NetworkCapabilities
, você precisa passar uma Network
instância para o getNetworkCapabilities()
método Para obter essa instância, você precisa chamar o getActiveNetwork()
que foi adicionado no nível 23 da API.
Então, por enquanto, acredito que a maneira correta de verificar com segurança se você está conectado à rede Wi-Fi ou celular é:
public static boolean isNetworkConnected() {
final ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
if (Build.VERSION.SDK_INT < 23) {
final NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null) {
return (ni.isConnected() && (ni.getType() == ConnectivityManager.TYPE_WIFI || ni.getType() == ConnectivityManager.TYPE_MOBILE));
}
} else {
final Network n = cm.getActiveNetwork();
if (n != null) {
final NetworkCapabilities nc = cm.getNetworkCapabilities(n);
return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
}
}
}
return false;
}
Você também pode procurar outros tipos de TRANSPORT
, que você pode encontrar aqui .
Nota importante: se você está conectado ao Wi-Fi e a uma VPN, seu estado atual pode estar TRANSPORT_VPN
, portanto, você também pode procurar por ele.
Não se esqueça de adicionar a seguinte permissão ao seu arquivo AndroidManifest:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />