ashishb
ashishb

Reputation: 565

How to get NetworkCapabilities object on Android?

How to get android.net.NetworkCapabilities on Android?

I looked at https://developer.android.com/reference/android/net/ConnectivityManager.html and did not find any way to get NetworkCapabilities object.

Any suggestions on how to get it?

Upvotes: 9

Views: 10157

Answers (2)

Luca Biasotto
Luca Biasotto

Reputation: 338

    NetworkCapabilities nc = null;

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if(netInfo != null) {
            nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
        }

    }else{

        ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

        Network[] networks = connectivity.getAllNetworks();
        for (int i = 0; i < networks.length && nc == null; i++) {
            nc = connectivity.getNetworkCapabilities(networks[i]);
        }
    }
    // use now nc

On Android > 23 you can use ConnectivityManager and getActiveNetwork()

Upvotes: 6

Satty
Satty

Reputation: 1372

ConnectivityManager connectivity = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    Network[] networks = connectivity.getAllNetworks();
    for (int i = 0; i < networks.length; i++) {
        NetworkCapabilities capabilities = connectivity.getNetworkCapabilities(networks[i]);    
    }

But this is available with API 21 and above.

Upvotes: 13

Related Questions