Android的 - 检测是否需要无线上网的浏览器登录(Android - Detect if Wi

2019-06-27 01:19发布

我的大学有一个开放的WiFi接入点,然而,它要求你输入你的电子邮件,然后才允许你使用网络。 我的问题是,无线上网是愚蠢的,因为它似乎将我的连接,并强迫我再次输入电子邮件每隔10分钟。

我想创建自己的应用程序,我可以用它来自动为我做到这一步,但我似乎无法找到一个很好的和简单的方法来检测是否WiFi接入点有一个浏览器登录的页面的文档。 有没有在Android的一种方式来获得这些信息,或者它只是为了看看我的东西连接总是重定向到1.1.1.1?

Answer 1:

见的“处理网络登录”部分的HttpUrlConnection文件 :

一些Wi-Fi网络模块上网,直到用户点击通过一个登录页面。 这样的登录页通常通过使用HTTP重定向呈现。 您可以使用的getURL()来测试,如果你的连接意外重定向。 此检查是无效的,直到已经接收到响应报头之后,你可以通过调用getHeaderFields()或的getInputStream()触发。

他们的示例代码片段存在。 这是否将涉及您的特定WiFi AP,我不能说,但它是值得一试。



Answer 2:

平安的外部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()返回它应该因为这个原因。



Answer 3:

我认为@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。



Answer 4:

这个问题可能更是 - 至少在今天 - (5.1+)较新的Android版本保持3G / 4G连接和运行,直到Wi-Fi登录实际上导致一个功能齐全的WiFi连接。

我还没有尝试过,但也许与枚举值CAPTIVE_PORTAL_CHECKNetworkInfo小号DetailedState一个可以尝试正确地检测这样的模式?



文章来源: Android - Detect if Wifi Requires Browser Login