首先了解下这个机制是个什么玩意
安卓设备在连接wifi的时候会向谷歌的服务器发送一个请求,如果谷歌返回的Http响应码是204 not connect,那么安卓系统就认为该wifi可用。如果返回响应码不是204 not connect或者访问谷歌服务器失败了安卓系统就认为该wifi不可用,将AP临时禁用,此时连接的wifi虽然可以访问到互联网但是会发现wifi图标会带个!或者 x
安卓网络校验(也叫网络评估机制或者网络门户检测)为什么返回失败?
- 设备在内网环境
- 即便是在外网,但是网络环境无法有效访问谷歌的校验网址
想要查看网络校验是否成功,可以参考https://blog.csdn.net/weixin_44008788/article/details/115798135?spm=1001.2014.3001.5506
网络校验失败导致的问题
- 设备重启无法自动连接wifi
- 连接wifi成功,可以访问网络,但显示无法访问互联网,且状态栏中wifi的图标带x
- 连接互联网后无法从浏览器中下载文件
解决方法:
- 在内网搭建一个返回Http状态码为204 not connect的web服务,然后将该网址替换系统默认的校验网址
如下是替换校验网址的文件路径
--- a/packages/modules/NetworkStack/res/values/config.xml
+++ b/packages/modules/NetworkStack/res/values/config.xml
@@ -11,7 +11,7 @@
<integer name="default_captive_portal_dns_probe_timeout">12500</integer>
<!-- HTTP URL for network validation, to use for detecting captive portals. -->
- <string name="default_captive_portal_http_url" translatable="false">http://connectivitycheck.gstatic.com/generate_204</string>
+ <string name="default_captive_portal_http_url" translatable="false">http://xxxxx/generate_204</string>
<!-- HTTPS URL for network validation, to use for confirming internet connectivity. -->
<string name="default_captive_portal_https_url" translatable="false">https://www.google.com/generate_204</string>
-
如果是在外网的话,随便找个互联网上可以返回204 not connect的网址,前提是要稳定,客户现场要能访问到。然后使用adb命令将系统已存在的校验网址进行替换, 具体操作可参考https://zhuanlan.zhihu.com/p/107496545
-
如果没有特殊要求的话建议将网络评估机制的结果直接手动返回成功
以平台:mtk6771 android10示例
+++ b/packages/modules/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java
@@ -1468,6 +1468,7 @@ public class NetworkMonitor extends StateMachine {
@VisibleForTesting
protected CaptivePortalProbeResult isCaptivePortal() {
+ mIsCaptivePortalCheckEnabled = false;
if (!mIsCaptivePortalCheckEnabled) {
validationLog("Validation disabled.");
return CaptivePortalProbeResult.SUCCESS;