我的大学有一个开放的WiFi接入点,然而,它要求你输入你的电子邮件,然后才允许你使用网络。 我的问题是,无线上网是愚蠢的,因为它似乎将我的连接,并强迫我再次输入电子邮件每隔10分钟。
我想创建自己的应用程序,我可以用它来自动为我做到这一步,但我似乎无法找到一个很好的和简单的方法来检测是否WiFi接入点有一个浏览器登录的页面的文档。 有没有在Android的一种方式来获得这些信息,或者它只是为了看看我的东西连接总是重定向到1.1.1.1?
我的大学有一个开放的WiFi接入点,然而,它要求你输入你的电子邮件,然后才允许你使用网络。 我的问题是,无线上网是愚蠢的,因为它似乎将我的连接,并强迫我再次输入电子邮件每隔10分钟。
我想创建自己的应用程序,我可以用它来自动为我做到这一步,但我似乎无法找到一个很好的和简单的方法来检测是否WiFi接入点有一个浏览器登录的页面的文档。 有没有在Android的一种方式来获得这些信息,或者它只是为了看看我的东西连接总是重定向到1.1.1.1?
见的“处理网络登录”部分的HttpUrlConnection
文件 :
一些Wi-Fi网络模块上网,直到用户点击通过一个登录页面。 这样的登录页通常通过使用HTTP重定向呈现。 您可以使用的getURL()来测试,如果你的连接意外重定向。 此检查是无效的,直到已经接收到响应报头之后,你可以通过调用getHeaderFields()或的getInputStream()触发。
他们的示例代码片段存在。 这是否将涉及您的特定WiFi AP,我不能说,但它是值得一试。
平安的外部IP地址(如google.com),看看它是否响应。
try {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("ping -c 1 " + "google.com");
proc.waitFor();
int exitCode = proc.exitValue();
if(exitCode == 0) {
Log.d("Ping", "Ping successful!";
} else {
Log.d("Ping", "Ping unsuccessful.");
}
}
catch (IOException e) {}
catch (InterruptedException e) {}
唯一不足的是,这也将表明,当有根本上的WiFi接入点没有互联网连接的网络需要登录。
@CommonsWare我相信这是比打开一个URLConnection和检查主机,因为显示重定向页面当主持人通常不会更改,甚至更好的答案。 例如,我测试了贝尔金路由器,它让你在浏览器中键入任何原样,但仍显示了自己的网页。 urlConnection.getUrl()和getHost()返回它应该因为这个原因。
我认为@FlyWheel是正确的道路上,但我会用http://clients1.google.com/generate_204 ,如果你没有得到一个204,你知道你是一个强制网络门户后面。 直到你得到一个204在这种情况下,你知道你是不是一个强制网络门户落后了,那么你可以在一个循环中运行此。
@FlyWheel写道:唯一的缺点是,这也将表明,当有根本上的WiFi接入点没有互联网连接的网络需要登录。
您可以通过注册一个接收器android.net.conn.CONNECTIVITY_CHANGE解决这个问题。 您可以检查无线网络连接上,并且通过看连接的请求者国家相连。
这里是一个片段,但我没有运行它:
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wm.getConnectionInfo();
SupplicantState suppState = wifiInfo.getSupplicantState();
if (wm.isWifiEnabled()) {
if (suppState == SupplicantState.COMPLETED){
// TODO - while loop checking generate_204 (FlyWheels code)Using intent service.
}
}
我不记得,如果SupplicantState完成或关联,就必须检查。 因为广播接收机寿命短,应使用一个IntentService用于检查generate_204。
这个问题可能更是 - 至少在今天 - (5.1+)较新的Android版本保持3G / 4G连接和运行,直到Wi-Fi登录实际上导致一个功能齐全的WiFi连接。
我还没有尝试过,但也许与枚举值CAPTIVE_PORTAL_CHECK
的NetworkInfo
小号DetailedState
一个可以尝试正确地检测这样的模式?