2012-11-04 50 views
6

我做了一個程序,我必須使用wifi來連接互聯網。我找到一些信息來檢查wifi是否連接。但是在某些情況下,您可以連接wifi AP,但您仍然無法使用互聯網,如https所需的無線網絡需要帳戶和密碼以證書,或者wifi AP無法上網。那麼,我如何檢查連接的真實互聯網?如何檢查在android中連接的真實互聯網?

回答

5

只要做一個「平」到www.google.com機會,他們是下跌非常低。

P.S.這是我們在我們的應用程序做..

public static boolean isReachable(Context context) { 
    // First, check we have connectivity 
    final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final NetworkInfo netInfo = connMgr.getActiveNetworkInfo(); 

    if (netInfo != null && netInfo.isConnected()) { 
     // check if google is reachable 
     try { 
      URL url = new URL("http://www.google.com"); 
      HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(10 * 1000); // Ten seconds timeout in milliseconds 
      urlc.connect(); 
      if (urlc.getResponseCode() == 200) { // success 
       return true; 
      } else { // Fail 
       return false; 
      } 
     } catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
      return false; 
     } 
    } else { 
     return false; 
    } 
} 
+0

我覺得ping是一個好方法,但在android4.0中,這個方法需要新的線程來實現。有沒有其他的方式可以沒有新的線程? –

+0

您應該始終在單獨的線程(而不是主線程)上執行網絡操作,以確保您的應用程序的響應速度。 – Frank

+0

毫米,好吧,我在那裏有一些方法像androidmanager中的wifimanager或networkInfo,可以直接檢查真實的互聯網 –

1

按照下面的方法,如果設備不處於飛行模式或沒有任何連接模式下可用的網絡,方法將返回false,否則爲true。請記住,如果上述情況得到滿足,它將返回空值。因此,它通過檢查空的netInfo對象來處理。

public boolean isOnline() { 
ConnectivityManager conManager = 
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = conManager .getActiveNetworkInfo(); 
if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
    return true; 
} 
return false; 

}

記住要允許訪問網絡狀態的清單。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
2

請參閱下面:

請返回布爾值的方法:

ConnectivityManager connectivityManager; 
    NetworkInfo wifiInfo, mobileInfo; 

    public Boolean checkNow(Context con){ 
    try{ 
     connectivityManager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE); 
     wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     if(wifiInfo.isConnected() || mobileInfo.isConnected()) 
     { 
      return true; 
     } 
    } 
    catch(Exception e){ 
     System.out.println("CheckConnectivity Exception: " + e.getMessage()); 
    } 

    return false; 
} 

用上面的方法在你的onCreate()方法如下圖所示:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     boolean con = checkNow(getApplicationContext()); 

     if(con){ 
      Toast.makeText(getApplicationContext(), "Connection Founded", Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(getApplicationContext(), "Connection Not Founded", Toast.LENGTH_SHORT).show(); 
     } 

} 

當你運行該應用程序,您將提示爲"Connection Founded"如果互聯網連接AVA在您的設備中可用,否則會提示"Connection Not Founded"