Android在使用静态IP时检查网络连接

时间:2012-01-09 08:31:11

标签: android httpurlconnection static-ip-address

在设备上使用静态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; 
}

2 个答案:

答案 0 :(得分:0)

使用此方法....我希望它对您有所帮助。

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

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

答案 1 :(得分:0)

以下是您可以在您的情况下使用的内容。如果您连接到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;
}