Search code examples
javaandroidconnection

How can I check internet connection in Android Q?


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?


Solution

  •     @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" />