2017-10-20 124 views
0

的我有一個測試,如果WiFi連接可用代碼。Wifi連接工作inspite接入點

public boolean checkInternetConnection() { 

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
if (netInfo != null && netInfo.isConnected()) { 
    try { 
     URL url = new URL("http://www.google.com"); 
     HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
     urlc.setRequestProperty("User-Agent", "Test"); 
     urlc.setRequestProperty("Connection", "close"); 
     urlc.setConnectTimeout(3000); 
     urlc.setReadTimeout(4000); 
     urlc.connect(); 
     if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) { 
      Log.i(TAG,"Internet connection is OK"); 
      return true; 
      } 
     } catch (MalformedURLException mue) { 
       mue.printStackTrace(); 
     } catch (IOException ie) { 
       ie.printStackTrace(); 
     } 
    } 
    Log.i(TAG, "No internet connection."); 
    return false; 
} 

訪問互聯網,我必須通過接入點,這就是爲什麼我espacially平谷歌,因爲我需要的,如果我們也是。我已經注意到登錄,在許多情況下,沉綿我不記錄進入強制門戶,代碼窗口達到谷歌並返回true。我也能夠上網服務器,比如ftp。 有誰知道這種行爲的原因是什麼?有沒有其他人注意到這種行爲?

謝謝

+0

我沒有看到你ping通谷歌。也不是登錄。也不是一個俘虜門戶。無論如何。 – greenapps

回答

0

一些圈養門戶允許訪問,而無需登錄到一組服務有限(例如公司的WiFi服務的所有者的法人網站)。我已經看到了多年來我使用過的一些WiFi接入點允許使用Google首頁。這可能是你注意到的。

也許有更好的方法(或附加)將是檢查網絡的詳細狀態NetworkInfo.html#getDetailedState()這也給了你關於強制門戶檢測信息。

此外,檢查您自己的服務器中的特定頁面可能會有所幫助(不需要登錄就不會被允許),而且通過HTTPS而不是簡單的HTTP進行操作可能會爲您提供更多信息(通常會獲得證書不匹配錯誤,因爲俘虜門戶就像中間人一樣行事)。

+0

我在上面的代碼中添加了NetworkInfo.html#getDetailedState()。我嘗試沒有登錄到門戶網站,我得到狀態CONNECTED和chechInternet函數返回true。雖然這一次,我無法訪問外部服務器,雖然它有時可以工作(這不是我的服務器,我沒有)。我登錄門戶網站後試用過,並得到了相同的答案CONNECTED。 – AudVid

+1

對您的代碼進行第二次審覈時,您並未真正檢查您是否訪問過google.com。你只是檢查你得到一個200 Ok的頁面,但你不知道這個頁面是真的google.com還是強制門戶。如果您將URL更改爲https://www.google.com(正如我在答覆中所述),您可能會收到證書錯誤,這將允許您更準確地檢查連接。 –

+0

再次感謝您的幫助。我嘗試切換網址url =新網址(「http://www.google.com」);到網址url =新網址(「google.com」);我得到了java.net.MalformedURLException:未找到協議:google.com,但我想我誤解了你所問的內容。 – AudVid