我想检查设备是否真正连接到互联网,甚至连接到需要登录的打开的 wifi 热点。
经典代码:
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected() && netInfo.isAvailable(){
//connection on
}
可以正常查看设备已连接,但不是真正的互联网。
我用 :
URL url = new URL("http://www.google.com");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout((int)(1000 * TIMEOUT));
urlConnection.connect();
if (urlConnection.getResponseCode() == 200 && url.getHost().equals(urlConnection.getURL().getHost())) {
//I am supposed to be connected
}
因为当连接到热点时,我们通常会被重定向到登录页面。虽然,在我的测试中,httpUrlConnection 没有被重定向,然后 urlConnection.getURL.getHost() 真的是“google.com”。
该怎么办?