问题展示
pixel手机连接wifi,显示网络受限,如图

解决步骤
安装adb(android debug bridge)
下载地址
SDK 平台工具版本说明 | Android Studio | Android Developers
如果网络过慢,可以私聊我邮箱(836676738@qq.com)寻求对应文件

解压到对应的目录
以windows为例,将解压后的安装目录platform-tools添加到path中

验证adb安装成功,在cmd中执行
bash
adb version
如图,显示版本信息, 表示安装成功

将手机连接到adb
以Pixel手机为例(其他型号的手机可以自行搜索,大差不差)
在 Pixel 上打开【设置】→【关于手机】

找到【版本号】(Build number),连续点击 7 次

返回设置主页,进入【系统】→【开发者选项】
打开 USB 调试

用数据线将手机与电脑相连
第一次连电脑时,手机会弹出"是否允许此电脑进行 USB 调试",记得点"允许",并勾选"始终允许"。

在cmd输入
bash
adb devices
显示新连接的手机

执行命令
先将手机调成飞行模式
执行如下命令
bash
adb shell settings put global captive_portal_server http://www.google.cn
adb shell settings put global captive_portal_http_url https://www.google.cn/generate_204
adb shell settings put global captive_portal_mode 0
再将飞行模式关闭,重新开启WIFI功能,网络连接成功

问题解析
要理解这几条命令,需要先了解 Captive Portal 检测机制。
-
Captive Portal 是什么? 它指的是需要网页认证的 Wi-Fi 热点(比如酒店、机场的 Wi-Fi)。Android 系统连接 Wi-Fi 后,为了判断这个网络是能直接上网,还是需要登录认证,会默认访问一个特定的网址来测试 。
-
默认服务器的问题 :Android 原生系统默认的检测服务器是 Google 的(如
http://connectivitycheck.gstatic.com/generate_204)。这个地址在特定网络环境下可能无法访问,导致系统误判,认为网络不可用,从而在 Wi-Fi 图标上显示感叹号 。 -
解决方案 :这三条命令的最终目的,就是让系统停止使用那个无法访问的默认服务器 ,或者告诉系统完全不要做这个检测。
-
前两条命令 (
captive_portal_server和captive_portal_http_url) :相当于"换条路"。把检测地址换成国内可以稳定访问的服务器(比如这里的www.google.cn),这样系统就能正确收到"网络可用"的信号,感叹号自然消失 。 -
第三条命令 (
captive_portal_mode 0):相当于"直接关掉导航"。告诉系统彻底别做这个检测了,也就不会因为检测失败而报错 。
-
总的来说,这是一个非常经典的 Android 调试技巧,通过修改系统设置,绕过因默认检测服务器不可用而导致的状态显示错误。
其他可能遇到的问题
即使联网,也无法自动更新时间
在连上网后,发现日期还是无法自动更新

解决办法
在adb连接的状态下,输入命令
bash
adb shell settings put global ntp_server ntp.aliyun.com
然后重启手机

时间正常