2017-10-20 122 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