1

У меня есть код ниже, который предназначен для проверки того, используется ли сеть для Cell или WiFi. Если WiFi затем вернет строку WiFi, и если ячейка вернет строку Cell. Код, который у меня есть:Проблема с Android NetworkState, возвращающаяся дважды

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 - false. Тем не менее, и то, и другое вызвано, почему это происходит?

Сказав, что возвращаемая строка, которую я получаю, фактически является «WiFi», а не ячейкой. Это обычное дело?

+0

Подождите, «WiFi» и «Ячейка» не могут быть вызваны одновременно, так как один находится в «else». Или я тебя плохо понял? –

+0

Ваш вопрос не имеет смысла - функция не может вернуться дважды, и вы сами говорите, что есть возвращаемое значение Wi-Fi. Вы также говорите, что isWifi истинно, так что ожидается. Так что же именно происходит? –

+0

При вызове метода isOnWifi равно true и is3G равно false. Поэтому, когда будет достигнут блок if/else, я ожидаю, что возврат будет ТОЛЬКО Wi-Fi, однако, если положить конец отладки на оба оператора возврата, оба они кажутся триггерами, что не имеет никакого смысла. Если IF срабатывает, то ELSE будет обходить? Вы правы, однако, я получаю WiFi в качестве возвращаемого значения, несмотря на то, что второе возвращение также появляется –

ответ

0

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

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(); 
}