【问题标题】:How to know whether device has data connection?如何知道设备是否有数据连接?
【发布时间】:2012-12-01 18:13:21
【问题描述】:

我正在尝试检测设备是否具有 wifi 或 3g 连接。如果它有连接,它将显示MapView,但是当两者都没有连接时,我的条件语句出现问题。

以下是我检查网络连接的方法:

private boolean haveNetworkConnection() {
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}

这是我调用该方法的代码。可以上网时显示MapView,不上网时不显示toast。

if (haveNetworkConnection()) {
    if (loc != null && !loc.equals("")) {
        new GeocoderTask().execute(loc);
    } else {
        Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show();
    }
}

【问题讨论】:

    标签: android connectivity


    【解决方案1】:

    假设您的循环返回正确的值,让我们取出本地布尔值,因为它们是不必要的:

    private boolean haveNetworkConnection() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI") && ni.isConnected())
                return true;
            if (ni.getTypeName().equalsIgnoreCase("MOBILE") && ni.isConnected())
                return true;
        }
        return false;
    }
    

    如果循环不正确,您可以在代码中合并the documentation's method

    private boolean haveNetworkConnection() {
        ConnectivityManager cm =
                (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        if(activeNetwork != null)
            return activeNetwork.isConnectedOrConnecting();
        return false;
    }
    

    【讨论】:

      【解决方案2】:

      试试这个来检查互联网连接是否可用:

      private boolean isNetworkAvailable() {
          ConnectivityManager connectivityManager 
              = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
          NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
      
          return activeNetworkInfo != null;
      }
      

      【讨论】:

        【解决方案3】:
        private boolean haveNetworkConnection() {
            //boolean haveConnectedWifi = false;
            //boolean haveConnectedMobile = false;
        
            ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo[] netInfo = cm.getAllNetworkInfo();
            for (NetworkInfo ni : netInfo) {
                if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                    if (ni.isConnected())
                        return true;
                if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                    if (ni.isConnected())
                        return true;
            }
            return false;
        }
        

        【讨论】:

          【解决方案4】:

          你的逻辑是错误的:

          if (haveNetworkConnection()) {
                  if (loc != null && !loc.equals("")) {
                      new GeocoderTask().execute(loc);
                  } else {
                      Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show();
                  }
              }
          

          如果 haveNetworkConnection () 为 false,您将永远无法到达 Toast。您应该按如下方式更改它:

          if (haveNetworkConnection()) {
                      if (loc != null && !loc.equals("")) {
                          new GeocoderTask().execute(loc);
                      } 
                  }
          else {
                          Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show();
                      }
          

          【讨论】:

            猜你喜欢
            • 2021-08-25
            • 1970-01-01
            • 1970-01-01
            • 2012-10-19
            • 1970-01-01
            • 2016-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多