我有一个代码可以测试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 谷歌,因为如果我们也登录,我需要。我注意到,在许多情况下,即使我没有登录强制门户,代码门槛也会到达谷歌并返回 true。我也能够互联网服务器,如ftp。有谁知道这种行为的原因是什么?还有其他人注意到这种行为吗?
谢谢
一些强制门户允许在不登录有限服务(例如WiFi服务所有者的公司公司网站)的情况下访问。我已经看到谷歌首页允许在我多年来使用的一些WiFi AP中使用。这可能是你注意到的。
也许更好的方法(或附加方法)是检查网络详细状态 NetworkInfo.html#getDetailedState(),它还为您提供有关强制门户检测的信息。
此外,检查您自己的服务器中的特定页面可能会有所帮助(不太可能在不登录的情况下被允许),此外,通过HTTPS而不是纯HTTP进行检查可能会为您提供其他信息(获得证书不匹配错误是很常见的,因为强制门户的行为就像中间人)。