Before Android Q all you had to do is use the NetworkUtils class. But this class was deprecated in API 29. I've been searching for an alternative, and I couldn't seem to find one.
So, how can I check the internet connection in Android Q?
@IntRange(from = 0, to = 4)
public static int getConnectionType(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null) {
return 0; // No connection
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
if (capabilities == null) {
return 0; // No connection
}
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
return 2; // WiFi
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
return 1; // Cellular data
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
return 3; // VPN
} else {
return 4; // Other network types like Ethernet
}
} else {
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork == null || !activeNetwork.isConnected()) {
return 0; // No connection
}
switch (activeNetwork.getType()) {
case ConnectivityManager.TYPE_WIFI:
return 2; // WiFi
case ConnectivityManager.TYPE_MOBILE:
return 1; // Cellular data
case ConnectivityManager.TYPE_VPN:
return 3; // VPN
default:
return 4; // Other network types like Ethernet
}
}
}
Permissions in AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />