使用(类)原生 Android 的用户在中国大陆会发现状态栏的网络信号有个叉或者是感叹号,这是为什么呢?又该如何去除?
说明
CaptivePortal 是 Android 5.0 引入的一种检测网络是否正常连接的机制,通过 HTTP 返回的状态码是否是 204 来判断是否成功,如果访问得到了 200,那你就可能处在一个需要登录验证才能上网的环境里,比如说校园网,再比如说一些酒店提供的客户才能免费使用的 Wi-Fi(其实是通过 DNS 劫持实现的),如果连接超时(根本就连接不上)就在 Wi-Fi 图标和信号图标上加一个标志,Android 5 和 Android 6 是叹号,Android 7 改成一个叉了。只不过默认访问的是谷歌自家的验证服务器,然而 Google 是被墙掉了,导致 Android 没有办法正确评估网络。所以,系统每隔一定时间都会重新尝试连接,就在不知不觉中消耗了数据流量。更恐怖的就是 Android 认为在 Wi-Fi 下无法连接互联网,就让联网的程序通通走流量…
ADB 工具
要想去除,需要用到一个工具,那就是 ADB,点此 下载(需要科学上网)。然后请自行搞定 ADB 的环境变量配置,如果不会请点此。配置好后,请在手机设置里开启开发者选项,然后再打开USB 调试。最后通过数据线连接电脑,就可以开搞了。
解决方法
Android 5.0 - 6.0
1 | # 删除地址就可以恢复默认的谷歌服务器 |
注意:执行完后请打开飞行模式后再关闭
Android 7.0 - Android 13.0
1 | # 删除(删除默认用 HTTPS ) |
注意:最后,请打开飞行模式后再把飞行模式关掉就好啦~
更改 NTP 服务器(网络时间校准)
如果更改完 Captive Portal 的服务器(即上述操作)后信号仍然显示叉叉,或者说网络受限。原因可能是因为当地网络环境 NTP 服务器受限,导致时间无法校准。
1 | # 删除(删除默认用 NTP 服务器 ) |
请前往「Settings 设置」 -> 「System 系统」 -> 「Advanced 高级」 -> 「Date and time 日期和时间」,确保「Use network-provided time 使用网络提供时间」和「Use network-provided timezone 使用网络提供的时区」2 个选项已启用,然后重新开关一次飞行模式应该就可以了。