android - android如何知道wifi连接是否可以上网

标签 android android-intent wifi android-wifi

我工作的公司正在镇上建立免费的 wifi 热点。要连接到互联网,客户首先必须同意条款和条件,这是一个包含条款和接受按钮的简单表格。在他们接受之前,他们不会被授予完全的互联网访问权限。

问题 我们遇到的问题是一些 android 设备,当您自动连接到 wifi 时,它们不再提示您使用此“登录”表单。相反,一个小的指示图标会出现在左上角,表明在访问互联网之前需要额外的注册步骤。同时,客户在使用互联网时认为他们使用的是 wifi,但实际上他们使用的是 3G 和移动数据,这让客户付出了代价。

建议的修复 我们想出的是通过字母伪造互联网访问,Android 设备正在使用的流量槽能够确定他们是否有互联网。通过这样做,手机将不会使用客户端的 3G 网络。相反,流量将被我们阻止,直到他们发现他们需要接受电话中这个小图标所指示的条款。这当然不是最好的解决方案,但它可以帮助客户在月底不会收到意外的巨额账单:)

我的问题是我们需要允许什么样的流量才能让它工作?它只是世界上每部安卓手机每次需要查看是否可以通过 wifi 访问互联网时使用的 IP(我觉得这不太可能),或者它是如何工作的?

最佳答案

这个问题有点老,但我想分享我在实现自己的解决方案时对这个主题的了解。

您想要做的基本上是一个强制门户。 Android 设备检测到请求特定 URL 的强制门户,当前为 http://connectivitycheck.gstatic.com/generate_204 。如果他们收到 204 响应,则表示已连接。如果他们收到 30 倍的响应,则说明存在强制门户。在这种情况下,系统会提示用户使用门户的登录页面,他可以在其中接受条款或提供其他信息。

每次设备连接到网络时都会发生这种情况。连接后,它会不断检查以确保网络仍然有可用连接(我不知道说检查的间隔,但它是几分钟)。

为了更好地调试,您应该记录您的客户请求并查看他们在登录您的网络时试图访问的内容。这是因为强制门户的概念很普遍,每个客户端/平台都请求自己的 URL。

此外,您可以使用强制门户解决方案(如果尚未使用的话)。有很多可以完成你想要的。仅举一些例子,看看 NodosplashCoovaChilliWiFiDog

关于android - android如何知道wifi连接是否可以上网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33431931/

相关文章:

android - 'or' 的目的是 -1 的值?

android - 如何在Android Market上发布应用程序更新?

java - 通过主屏幕替换技术了解 Android 上的自定义锁实现

android - 为什么隐式电子邮件 Intent 可以在不指定 IntentFilter 的情况下工作?

ios - NEHotspotConfigurationErrorDomain 某些设备上出现错误

iOS 将 WIFI 设置传递给蓝牙(BLE)设备?

android - 在哪里可以找到 android-v7 支持库 jar

android - 我想使用微调器/下拉列表在 webview 上打开网站

android - 从服务恢复 android Activity

android - 当 wifi SSID 改变时执行代码