【问题标题】:Android checkign network connection while using static IPAndroid在使用静态IP时检查网络连接
【发布时间】:2012-02-05 19:43:59
【问题描述】:

在设备上使用静态 IP 时检测互联网连接几乎没有问题。虽然我在没有设置任何静态 ip 的情况下进行连接,但用于检测可用连接的功能正常工作。但是当我设置静态 IP 时,函数返回 true,因为我连接到 Wifi 或 3G,但我没有任何互联网连接,所以我的应用程序在这种情况下崩溃了。任何想法如何在使用静态 IP 时解决该问题? 这是我正在使用的:

public boolean chkNetworkStatus(Context context) {
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
     if (connectivity == null) {
         Toast.makeText(context, "No available connection!", Toast.LENGTH_LONG);
     } else {
         NetworkInfo[] info = connectivity.getAllNetworkInfo();
         if (info != null) {
            for (int i = 0; i < info.length; i++) {
                 if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                 }
             }
         }
     }
     return false; 
}

【问题讨论】:

  • 您粘贴的代码是正确的,所以可能您的问题不在这里。
  • 代码中没有。当我不使用静态 IP 时,一切正常,但如果我将选项设置为使用静态,我什至无法在设备上打开网站,但检查网络是否通过 true,因为我已连接到 Wifi 或 3G,但我无法访问互联网。这就是它崩溃的原因。
  • info[i].getState() == NetworkInfo.State.CONNECTED 只检查network connected, but can not identify can connect to the web, public boolean isConnected() 因为:API Level 1 表示网络连接是否存在并且可以建立连接并传递数据。

标签: android httpurlconnection static-ip-address


【解决方案1】:

使用这个方法....希望对你有帮助。

公共布尔检查网络连接(上下文上下文){

    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    if (activeNetwork != null) {
        return activeNetwork.isConnectedOrConnecting();
    }

    NetworkInfo wifiNetwork = cm
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (wifiNetwork != null) {
        return wifiNetwork.isConnectedOrConnecting();
    }

    NetworkInfo mobileNetwork = cm
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if (mobileNetwork != null) {
        return mobileNetwork.isConnectedOrConnecting();
    }

    NetworkInfo otherNetwork = cm.getActiveNetworkInfo();
    if (otherNetwork != null) {
        return otherNetwork.isConnectedOrConnecting();
    }
    return false;
}

【讨论】:

    【解决方案2】:

    这是您可以在您的情况下使用的内容。如果您连接到 wifi/3g 并且您可以加载任何网页,此函数将返回 true

        public static boolean isOnline(Context context) {
             ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
             NetworkInfo netInfo = cm.getActiveNetworkInfo();
            if (netInfo != null && netInfo.isConnectedOrConnecting()) {
                return true;
            }
            return false;
        }
    
        public static boolean chkNetworkStatus(Context context) {
        boolean result = false;
        new Thread() {
            @Override
            public void run() {
    
    
               for(int i=0;i<3;i++){
               HttpGet requestForTest = new HttpGet("http://m.google.com");
               try {
                      new DefaultHttpClient().execute(requestForTest);
                      responded = true;
                    } catch (Exception e) {
                        responded = false;
                    }
               }
            }
        }.start();
        boolean isOnline = isOnline(context);
        if(responded && isOnline){
            result = true;
        } else {
            result = false;
        }
    
        Log.e("","responded : "+responded);
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 2020-05-25
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2017-03-11
      相关资源
      最近更新 更多