LouisLaw 发表于 2015-12-29 23:38

去除 Android 5.0/5.1/6.0 网络和Wi-Fi图标上的感叹号教程

自从Android升级了安卓5.0以后。大家一定对网络图标上面的那个感叹号感到十分郁闷。

先说一下原因:
安卓5.0引入了一种新的网络评估机制来评估网络状况,当你有网络请求时会自动选择网络连接条件最好的一个网络进行连接。该机制的代码实现如下:



简要来说就是,如果该网络是VPN,那么直接使用这个网络进行连接,否则调用 isCaptivePortal() 函数进行网络状况的判定,再根据判定结果决定是否选用此网络。 而罪魁祸首就是这个 isCaptivePortal() 函数,它会访问 clients3.google.com/generate_204 并根据返回结果来判断网络联通状况。正是这个google的网址被墙导致安卓没有办法评估网络,这样就导致了那个蛋碎的感叹号一直存在,以及wifi用着用着突然自动连回数据连接了。

本来我想直接把 isCaptivePortal() 函数给屏蔽掉,让他一直返回成功,但是看了下google的代码,发现这个函数是非常有用处的,为什么呢?这个函数有个非常重要的作用,那就是判断当前网络是否需要登录。

想必大家都连接过那些需要验证才能使用的wifi热点吧,当你们连接这些热点的时候,android会自动弹出提示询问你是否需要登录。而这个功能就是依靠了 isCaptivePortal() 这个函数才得以实现,具体原理如下:



安卓先访问 clients3.google.com/generate_204 这个网址,而这个网址如字面所说,会产生一个 http 204 返回值。204返回值的意思就是空内容。如果当前wifi是需要登录才可以连接,那么当试图访问google的服务器的时候,wifi的验证机制一定会自动跳转到一个登录页面,这个时候http请求的返回值就必然不是204了。就是通过这一机制,便可以区分当前wifi是否需要验证,不得不佩服想出这个办法的人来。

然而这就导致了如果简单的屏蔽掉这个函数的功能,那么就没有办法自动提示登录了,但是如果不屏蔽掉那么这个网址被墙掉了,因此会有一个难看的感叹号。想来想去我想到了一个曲线救国的办法,那就是我们把这个网址改成国内的网址不就可以了?我们自己搭一个服务器,来产生这个204返回值给它,问题不就迎刃而解了吗?

解决方法(无需root):

1.完全屏蔽网络检查功能,最简单快速,但是就没有办法提示wifi登录:
adb shell "settings put global captive_portal_detection_enabled 0"

2.用国内的服务器替换掉google的服务器:
adb shell "settings put global captive_portal_server bbs.ihei5.com"

这个服务器是爱黑武提供的,也就是本站:http://bbs.ihei5.com ,在服务器上写了个简单的204页面。
网址是 http://bbs.ihei5.com/generate_204 只要用这个网址替换掉google的网址,就可以正常访问并检测网络状态了。
爱黑武论坛的网速还算稳定,所以大家可以放心使用,这里提供几个备用的。

adb shell "settings put global captive_portal_server ihei5.com"
adb shell "settings put global captive_portal_server www.ihei5.com"



3.恢复默认值

对于第一条指令,恢复默认只需要执行:
adb shell "settings put global captive_portal_detection_enabled 1"

第二条指令的恢复方法有点区别:
adb shell "settings delete global captive_portal_server"



感谢作者的无私奉献

本文来源:https://www.noisyfox.cn/45.html 作者:小狐狸

wmslecz 发表于 2015-12-30 10:49

沙发{:victory:}{:victory:}{:victory:}{:victory:}{:victory:}{:victory:}{:victory:}

colourfuldays 发表于 2015-12-30 11:14

g.cn

Octocat 发表于 2015-12-30 13:09

用adb找不到设备 fastboot就可以 怎么办

LouisLaw 发表于 2015-12-30 16:24

Octocat 发表于 2015-12-30 13:09
用adb找不到设备 fastboot就可以 怎么办

设置里面开始adb调试

2196494025 发表于 2016-1-5 05:54

谢谢楼主分享 黑武大法好

lvshiqi 发表于 2016-1-5 23:29

没看懂楼主说的屏蔽这个函数,具体会失去什么功能,楼主可以详细在简单的说下吗

lvshiqi 发表于 2016-1-7 19:17

fastboot识别不了adb,开发者里面开启了的
在本地shell里面输入代码也无效,怎么破

huyuntao924 发表于 2016-1-13 12:41

我是小白,还是比较喜欢这种方法,操作简单http://bbs.ihei5.com/forum.php?mod=viewthread&tid=334255&extra=page%3D2%26filter%3Dtypeid%26typeid%3D1491

mcd 发表于 2016-1-19 14:43

怎么信号感叹号还是存在?{:cry:}
页: [1] 2
查看完整版本: 去除 Android 5.0/5.1/6.0 网络和Wi-Fi图标上的感叹号教程