Проблема 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();
}