Android 5.0网络图标上的感叹号的解决办法




前段时间刷了XDA开发者移植的CM12,基于Android5.0.1。由于Lollipop使用连接Google服务器来判断网络状态,这一改动使得国内用户十分头大。主要表现在:

  1. 出厂设置时会在检查网络状态那里卡上几分钟,直到显示跳过选项。
  2. 通知栏上的网络图标会显示感叹号,同时系统会不断尝试连接,造成不小流量和电量消耗。

本文转自http://小狐狸.中国/45.html,转载时请遵循原作者的版权声明。

升级了Android5.0的同学们一定对网络图标上面的那个感叹号感到十分郁闷。Android5.0引入了一种新的网络评估机制来评估网络状况,当你有网络请求时会自动选择网络连接条件最好的一个网络进行连接。该机制的代码实现如下:

20141216160153

简要来说就是,如果该网络是VPN,那么直接使用这个网络进行连接,否则调用 isCaptivePortal() 函数进行网络状况的判定,再根据判定结果决定是否选用此网络。 而罪魁祸首就是这个 isCaptivePortal() 函数,它会访问 clients3.google.com/generate_204 并根据返回结果来判断网络联通状况。由于Android与Google无法通讯导致了网络图标上的感叹号一直存在,更重要的是,如果你同时开着WiFi和蜂窝网络,而Android又判定WiFi网络无法联通时,系统会自动切换回蜂窝网络,想想就觉得可怕。

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

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

20141216161135

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

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

那么下面给出解决方法

  1. 完全屏蔽网络检查功能,最简单快速,但是就没有办法提示wifi登录:
adb shell su -c "settings put global captive_portal_detection_enabled 0"
  1. 用国内的服务器替换掉google的服务器:
adb shell su -c "settings put global captive_portal_server xn--yet824cpd.xn--fiqs8s"

这个服务器是我自己建的,也就是本站:http://小狐狸.中国/ 我在服务器上写了个简单的204页面,网址是 http://xn--yet824cpd.xn--fiqs8s/generate_204 只要用这个网址替换掉google的网址,就可以正常访问并检测网络状态了。不过由于本人的服务器速度并不快,所以感叹号还是会显示一小会儿的,不过应该很快就会消失。

如果你对本站提供的服务速度不满意,可以在文末找到网友提供的其它服务地址。

如何建立自己的服务器

  • 对于apache服务器,如果你的服务器安装了rewrite模块,那么只需要在网站的.htaccess中加入以下代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} /generate_204$
RewriteRule $ / [R=204]
</IfModule>
  •  对于nginx,直接加入以下设置即可:
location /generate_204 { return 204; }

如果以上方法都无效,那么就要利用代码中的一个小trick来完成,直接在网站的根目录下建立一个叫做“generate_204”的空文件即可,因为安卓的源码中写了如果返回的内容为空那么也会当成204(毕竟一个空的页面怎么想都不可能是登录页面嘛!)。

一键设置工具

锵锵锵!由于有些人不太熟悉adb之类的操作,因此就做了一个小工具方便大家直接在手机上设置!

device-2014-12-26-214011

下载:http://小狐狸.中国/download/75/

一些其它服务网址

我会尽我所能提供长期有效的服务,但是由于本站服务器不是很快,而且网络状况有时候会不稳定,因此无法保证100%可靠的服务。不过有一些热心网友提供了其它服务网址,速度和稳定性或许会比本站要好。故在此特别列出供大家选用。如果给提供者带来不便之处请回复告知,我会及时删除。

by EraserKing: g.cn 谷歌的短网址,不知道为什么没有被国内和谐,速度和稳定性自然是一流,但是不确定是否会在将来被和谐

by lkebin: liukebin.sinaapp.com 架设于国内SAE服务器,国内访问速度快,据lkebin称是永久有效




Posted

in

by

Comments

发表回复/Leave a Reply

您的电子邮箱地址不会被公开。/Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.