2012-12-28 39 views
1

我正在构建一个应用程序,帮助在Android上配置WIFI设置,我需要最快的方式来检查可用的互联网连接。 工作连接 - 不仅WIFI连接!最快的方式来检查Android中的互联网访问

我使用这个代码

URL url = new URL("http://www.google.com"); 
           final HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
           urlc.setRequestProperty("User-Agent", "Android Application"); 
           urlc.setRequestProperty("Connection", "close"); 
             urlc.setConnectTimeout(3 * 1000); 
             urlc.connect(); 

             if (urlc.getResponseCode() == 200) { // Good response 



             } else { 
             //bad 

             } 
            } catch (IOException e) { 
             //bad 
            } 

,但它需要很长时间才能得到回应,约20秒(即使超时为3秒?)。 有没有更快的方法来做到这一点?

+0

转到这个http://stackoverflow.com/questions/12889750/how-to-find-network-enable-status-in-android/128900 37#12890037 –

+0

@ user1591982我的回答有帮助吗? – kaderud

+0

不,对不起。同样的结果。但非常感谢你的答案! – user1591982

回答

-1

只要使用以下方法,你让服务器呼叫前:

public static boolean isOnline() { 

    try { 
     ConnectivityManager cm = (ConnectivityManager) Const.CONTEXT 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (cm != null) { 
      return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
     } else { 
      return false; 
     } 
    } catch (Exception e) { 
     return false; 
    } 
} 
+0

如果它返回true,则设备可以访问互联网? – user1591982

+0

是的,你是对的 –

+0

即使没有互联网访问,它也会返回true – user1591982

0

您的代码看起来不错,也许会更好地工作,如果还添加urlc.setReadTimeout(TIME_OUT);

下面是代码我使用它迄今为止已经捕获了各种WiFi /移动连接的情况,但没有互联网等。

public boolean isNetworksAvailable() { 
    ConnectivityManager mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (mConnMgr != null) { 
     NetworkInfo[] mNetInfo = mConnMgr.getAllNetworkInfo(); 
     if (mNetInfo != null) { 
      for (int i = 0; i < mNetInfo.length; i++) { 
       if (mNetInfo[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 

这段代码的作用是环通所有的网络状态,以确保找到一个连接状态,只有这样isNetworksAvailable()

isInternetConnected我们检查,如果我们可以做一个简单的HTTP URL连接。

public boolean isInternetConnected(String mUrl) { 
    final int CONNECTION_TIMEOUT = 2000; 
    if (isNetworksAvailable()) { 
     try { 
      HttpURLConnection mURLConnection = (HttpURLConnection) (new URL(mUrl).openConnection()); 
      mURLConnection.setRequestProperty("User-Agent", "ConnectionTest"); 
      mURLConnection.setRequestProperty("Connection", "close"); 
      mURLConnection.setConnectTimeout(CONNECTION_TIMEOUT); 
      mURLConnection.setReadTimeout(CONNECTION_TIMEOUT); 
      mURLConnection.connect(); 
      return (mURLConnection.getResponseCode() == 200); 
     } catch (IOException ioe) { 
      Log.e("isInternetConnected", "Exception occured while checking for Internet connection: ", ioe); 
     } 
    } else { 
     Log.e("isInternetConnected", "Not connected to WiFi/Mobile and no Internet available."); 
    } 
    return false; 
} 

此代码应在AsyncTask使用或以其他方式,你需要在onCreate()用下面的代码使用它,例如(但强烈推荐使用的,而不是做UI线程联网的的AsyncTask)如果

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

测试连接到互联网:

if (isInternetConnected("http://www.google.com")) { 
    showToast("Internet connected"); 
} else { 
    showToast("No connection to the Internet!"); 
}