Как узнать тип подключения к Интернету, который использует мой мобильный телефон

Я хочу знать, какой тип подключения к Интернету использует мой мобильный телефон (сотовая связь или Wi-Fi).

Network network;  
manager = (ConnectivityManager) this.getSystemService(this.CONNECTIVITY_SERVICE);
manager.getActiveNetworkInfo();

if (manager != null){
if (manager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)){
Toast.makeText(this, "Mobile Internet", Toast.LENGTH_SHORT).show();
         }
     }

В сообщении об ошибке говорится:

(Попытка вызвать виртуальный метод 'booleanandroid.net.NetworkCapabilities.hasTransport(int)' для нулевой ссылки на объект).


person peter Estifanos    schedule 03.10.2019    source источник
comment
проверить этот stackoverflow.com/questions/2802472/   -  person Ankit    schedule 03.10.2019
comment
Некоторые методы, такие как (getType), устарели.   -  person peter Estifanos    schedule 03.10.2019
comment
проверьте этот stackoverflow.com/questions/32547006/   -  person Ankit    schedule 03.10.2019


Ответы (3)


попробуйте это.

String networkStatus ="";
final ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
//Check Wifi
final android.net.NetworkInfo wifi = manager.getActiveNetworkInfo();
//Check for mobile data
final android.net.NetworkInfo mobile = manager.getActiveNetworkInfo();

if( wifi.getType() == ConnectivityManager.TYPE_WIFI) {
    networkStatus = "wifi";
}else if(mobile.getType() == ConnectivityManager.TYPE_MOBILE){
    networkStatus = "mobileData";
}else{
    networkStatus="noNetwork";
}
return networkStatus;
person Raja    schedule 03.10.2019
comment
Метод getType устарел для сетевых возможностей. - person peter Estifanos; 03.10.2019
comment
пожалуйста, проверь это. stackoverflow.com/questions/52816443/ - person Raja; 03.10.2019

Вы можете проверить, используя приведенный ниже код:

    private void checkInternetConnectionType() {
        boolean isConnected = false;
        NetworkInfo activeNetwork = null;
        ConnectivityManager cm =
            (ConnectivityManager)  this.getSystemService(Context.CONNECTIVITY_SERVICE);

        if (cm != null) {
            activeNetwork = cm.getActiveNetworkInfo();
            isConnected = activeNetwork != null &&
                activeNetwork.isConnectedOrConnecting();
        }

        boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
        boolean isMobileData = activeNetwork.getType() ==  ConnectivityManager.TYPE_MOBILE;
}

Добавьте следующие разрешения в AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

Кроме того, проверьте эту документацию: https://developer.android.com/training/monitoring-device-state/connectivity-monitoring#java

https://developer.android.com/reference/android/net/ConnectivityManager.html

person Deep    schedule 03.10.2019

Используйте функцию getCurrentNetworkType нижеприведенного класса (вы можете изменить класс и иметь только 1 функцию, этот класс является частью моего проекта):

public class ConnectionManagerK {

private static String TAG = "ConnectionManagerK";
private static ConnectionManagerK Instance;

public static ConnectionManagerK getInstance() {
    ConnectionManagerK localInstance = Instance;
    if (localInstance == null) {
        synchronized (ConnectionManagerK .class) {
            localInstance = Instance;
            if (localInstance == null) {
                Instance = localInstance = new ConnectionManagerK ();
            }
        }
    }
    return localInstance;
}


public static int getCurrentNetworkType() {
    if (isConnectedOrConnectingToWiFi()) {
        return StatsController.TYPE_WIFI;
    } else if (isRoaming()) {
        return StatsController.TYPE_ROAMING;
    } else {
        return StatsController.TYPE_MOBILE;
    }
}


public static boolean isNetworkOnline() {
    try {
        ConnectivityManager connectivityManager = (ConnectivityManager) ApplicationLoader.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
        if (netInfo != null && (netInfo.isConnectedOrConnecting() || netInfo.isAvailable())) {
            return true;
        }
        netInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (netInfo != null && netInfo.isConnectedOrConnecting()) {
            return true;
        } else {
            netInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if (netInfo != null && netInfo.isConnectedOrConnecting()) {
                return true;
            }
        }
    } catch (Exception e) {
        FileLog.e(e);
        return true;
    }
    return false;
}

public static boolean isRoaming() {
    try {
        ConnectivityManager connectivityManager = (ConnectivityManager) ApplicationLoader.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
        if (netInfo != null) {
            return netInfo.isRoaming();
        }
    } catch (Exception e) {
        FileLog.e(e);
    }
    return false;
}

public static boolean isConnectedOrConnectingToWiFi() {
    try {
        ConnectivityManager connectivityManager = (ConnectivityManager) ApplicationLoader.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        NetworkInfo.State state = netInfo.getState();
        if (netInfo != null && (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING || state == NetworkInfo.State.SUSPENDED)) {
            return true;
        }
    } catch (Exception e) {
        FileLog.e(e);
    }
    return false;
}

public static boolean isConnectedToWiFi() {
    try {
        ConnectivityManager connectivityManager = (ConnectivityManager) ApplicationLoader.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (netInfo != null && netInfo.getState() == NetworkInfo.State.CONNECTED) {
            return true;
        }
    } catch (Exception e) {
        FileLog.e(e);
    }
    return false;
}}
person Hosein Kord    schedule 03.10.2019