Проблема Android NetworkState, возвращающаяся дважды

У меня есть код ниже, который предназначен для проверки, используется ли сеть сотовой связи или WiFi. Если WiFi, то вернуть строку WiFi, а если cell, вернуть строку Cell. Код у меня есть:

private String checkNetworkState() {
        ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    //  NetworkInfo mEthernet = connManager.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET);
        NetworkInfo m3G = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (mWifi!=null) isOnWifi = mWifi.isConnected();
        if (m3G!=null) is3G = m3G.isConnected();

        if(isOnWifi == true) {
            return "WiFi";
        }
        else {
            return "Cell";
        }

    }

Я отладил с включенным WiFi. isOnWifi - это правда, а is3G - это ложь. Тем не менее, как и если и еще называют, почему это происходит?

Сказав, что возвращаемая строка, которую я получаю, на самом деле "WiFi", а не Cell. Это обычно?

1 ответ

Решение

Если вы проверяете состояние сети, вы должны изменить свой метод,

private boolean checkNetworkState() {
    ConnectivityManager connManager = (ConnectivityManager)  getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    NetworkInfo m3G = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if (mWifi!=null) isOnWifi = mWifi.isConnected();
    if (m3G!=null) is3G = m3G.isConnected();

    if(isOnWifi == true || is3G == true) {
        return true;
    }

    return false;
}

Вы не можете получить два значения из одного и того же метода, попробуйте использовать соответствующий метод для каждого случая:

public boolean isConnectedWifi() {
         ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
         NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
         return mWifi.isConnected();
}

public boolean isConnectedMobile() {
        ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
         NetworkInfo m3G = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
         return m3G.isConnected();
}
Другие вопросы по тегам