2012-12-28 62 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!"); 
}