【问题标题】:Android NetworkState issue, returning twiceAndroid NetworkState 问题,返回两次
【发布时间】:2015-02-11 17:01:26
【问题描述】:

我有下面的代码,用于检查正在使用的网络是 Cell 还是 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 为假。但是,if 和 else 都被调用了,为什么会这样?

话虽如此,我得到的返回字符串实际上是“WiFi”,而不是 Cell。这是平常的吗?

【问题讨论】:

  • 等等,“WiFi”和“Cell”不能同时调用,因为一个在“else”语句中。还是我没听懂你的意思?
  • 你的问题没有意义——一个函数不能返回两次,你自己说有一个wifi的返回值。你也说 isWifi 是真的,所以这是意料之中的。那么到底发生了哪些不应该发生的事情呢?
  • 当方法被调用时 isOnWifi 等于 true 并且 is3G 等于 false。因此,当到达 if/else 块时,我希望返回仅是 WiFi,但是,当在两个返回语句上放置调试停止时,两个返回语句似乎都会触发,这没有任何意义。如果 IF 肯定被触发, ELSE 会被绕过吗?你是对的,但是,我确实将 WiFi 作为返回值,尽管第二个返回似乎也被调用了

标签: android if-statement android-wifi connectivity network-state


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2010-10-28
    • 2012-10-20
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多