我有一个代码,测试是否有WiFi连接可用 .
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;
}
要访问互联网,我必须通过一个接入点,这就是为什么我特意ping谷歌,因为我需要,如果我们也登录 . 我注意到,在很多情况下,尽管我没有登录强制门户网站,代码sill到谷歌并返回true . 我也能够上网服务器,比如ftp . 有谁知道这种行为的原因是什么?有没有人注意到这种行为?
谢谢,
1 回答
一些强制门户允许访问而无需登录有限的一组服务(例如,WiFi服务的所有者的公司法人网站) . 我已经看到多年来我用过的一些WiFi AP允许使用Google首页 . 这可能是你注意到的 .
也许更好的方法(或额外)是检查网络详细状态NetworkInfo.html#getDetailedState(),它还为您提供有关强制网络门户检测的信息 .
此外,检查您自己的服务器中的特定页面可能会有所帮助(不会在没有登录的情况下被允许),再加上通过HTTPS而不是普通的HTTP进行操作可能会为您提供额外的信息(因为证书不匹配错误很常见,因为俘虏门户就像一个中间人 .