如果你使用的是 Android 5.0 以上的原生系统,那你很有可能遇到过这样一个现象:状态栏右上方的移动信号或者 Wi-Fi 指示图标旁莫名出现一个奇怪的感叹号。进入 WLAN 设置后还会发现,已经连接的无线网络下方出现「已连接,但不能连接到互联网」这样的提示。

为什么会有这种情况?我可以忽略它吗?

从 Android 5.0 开始,当系统连接网络时,系统模块 NetworkMonitor 就会向 Google 的一个特定网址(http://www.google.com/generate_204) 发送数据请求来判断网络状态,如果成功就会返回一个特定的值表示设备可以连接到互联网。这个「特定的网址」在国内是无法正常访问的,感叹号因而也就出现了。

在感叹号存在的状态下,即便是我们连接了某个 Wi-Fi ,手机仍然可能使用移动数据进行网络传输,这会导致在不知不觉间产生超额的流量费。同时,由于系统会不断的尝试联网,手机待机时间也会受到不小的影响。

换言之,我们一定不能对此置之不理

有哪些解决方法?

遇到「感叹号」问题目前有三种解决方法。

1. 通过应用解决

  • 方法:我们曾为大家介绍了一款名为 Portal Server 的 App 来解决这个烦恼,采用完全图形化界面,通过输入可以使用的「generate_204」网址就行。
  • 缺点:设备需要 Root,且应用作者提供的地址并不稳定。

2. 完全关闭网络检查服务

  • 方法:无需 Root,使用 ADB 命令关闭系统网络检查服务:adb shell settings put global captive_portal_detection_enabled 0
  • 缺点:当你使用公共 Wi-Fi 这种需要使用 portal 验证的网络时,因为网络检查被关闭,系统在访问 portal 验证页面时无法返回正确的值,最终导致无法完成验证和上网

3. 替换网络检查服务的网址

最好的办法还是使用 ADB 命令的形式,将验证服务的网址(http://www.google.com/generate_204)替换成一个可以正常访问的 「generate_204」网址,这种方法无需 Root,而且不影响 WiFi 连接问题,下面是具体的操作方法。

操作步骤

1. 首先,需要下载 ADB 工具包到电脑系统的根目录。

2. 进入工具包目录,按住 Shift 键,同时在文件夹空白处点击鼠标右键,选择「在此处打开命令窗口」,打开命令控制程序。

3. 将手机通过 USB 连接至电脑,打开手机的 USB 调试选项,并选择在「允许使用此台电脑进行调试」中选择确定。

4. 经过测试,目前国内满足要求的可访问网址有不少(动手能力强的也可以自己建立,但不再本次的讨论范围之内),下面提供两个访问较为稳定的,选择任何一个网址均可:

  • connect.rom.miui.com/generate_204 
  • www.v2ex.com/generate_204

5. 回到电脑桌面,在命令控制程序中,输入 adb shell。如果出现$标志说明 adb 服务已经开启,输入 exit 退出命令。

6. 直接输入以下命令并回车(任选其一):

  • adb shell settings put global captive_portal_server connect.rom.miui.com
  • adb shell settings put global captive_portal_server www.v2ex.com

7. 完成修改后可选择手动重启手机,或在当前命令控制程序窗口下,输入 adb shell reboot 进行重启,重启完毕之后你会发现恼人的感叹号已经没有了!

注:以上修改方法重启不会失效,但如果刷机或者系统重置后,则需要重新操作一遍。

如何还原

虽然这个情况很少发生,不过如果希望还原回去,也可以通过 adb 命令的形式,连接手机后在命令控制程序中输入以下两段命令:

  • adb shell settings delete global captive_portal_server
  • adb shell settings put global captive_portal_detection_enabled 1

之后手动重启手机或者输入 adb shell reboot 命令重启后即可还原。

参考链接:inexus:[更新]关于WiFi和信号图标出现感叹号消除办法