android 7感叹号的消除
安卓7改用访问 connectivitycheck.gstatic.com/generate_204 这个网址,
而这个网址如字面所说,会产生一个 http 204 返回值。
204返回值的意思就是空内容。
然而这就导致了如果简单的屏蔽掉这个函数的功能,那么就没有办法自动提示登录了,但是如果不屏蔽掉那么这个网址被墙掉了,因此会有一个难看的感叹号。想来想去我想到了一个曲线救国的办法,那就是我们把这个网址改成国内的网址不就可以了?我们自己搭一个服务器,来产生这个204返回值给它,问题不就迎刃而解了吗?
那么下面就给出解决方法(无需root):
1.完全屏蔽网络检查功能,最简单快速,但是就没有办法提示wifi登录:
adb shell “settings put global captive_portal_detection_enabled 0”
2.用国内的服务器替换掉google的服务器:
adb shell “settings put global captive_portal_server noisyfox.cn”
这个服务器是我自己建的,也就是本站:http://noisyfox.cn/ 我在服务器上写了个简单的204页面,网址是 http://noisyfox.cn/generate_204 只要用这个网址替换掉google的网址,就可以正常访问并检测网络状态了。不过由于本人的服务器速度并不快,所以感叹号还是会显示一小会儿的,不过应该很快就会消失。
3.恢复默认值
对于第一条指令,恢复默认只需要执行:
adb shell “settings put global captive_portal_detection_enabled 1”
第二条指令的恢复方法有点区别:
adb shell “settings delete global captive_portal_server”
是不是看着很舒服呢?烦人的感叹号没有了~
经过靠谱的确认,改修改方式具有持久性,重启依旧有效,除非刷机或者清除数据。
如何建立自己的服务器
1. 对于apache服务器,如果你的服务器安装了rewrite模块,那么只需要在网站的.htaccess中加入以下代码:
RewriteEngine On
RewriteCond %{REQUEST_URI} /generate_204$
RewriteRule $ / [R=204]
2. 对于nginx,直接加入以下设置即可:
location /generate_204 { return 204; }
以上方法在android 6的时候是有效的,可是升级到7后,我基于apache自建的就无效了,开始以为返回的header信息不对,后来经过抓包排查分析,发现7.0还增加了https握手连接。
解决方法就是打开apache的SSL模块,设置https配置,同时要增加DVSSL证书,就可以了
http://app.paiho.cn/generate_204
更新:android 7.1.1后需要使用 settings put global captive_portal_use_https 0
可能我的服务器https证书是免费的原因。