KillAd 发表于 2014-12-27 16:27

Android 5.0 WiFi和信号图标出现感叹号的解决办法

升级到Android 5.0的童鞋一定对网络图标上面的那个感叹号感到十分郁闷吧


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

  简要来说就是,如果该网络是VPN,那么直接使用这个网络进行连接,否则调用 isCaptivePortal() 函数进行网络状况的判定,再根据判定结果决定是否选用此网络。 而罪魁祸首就是这个 isCaptivePortal() 函数,它会访问 clients3.google.com/generate_204 并根据返回结果来判断网络连通状况。正是这个Google的网址被墙导致Android没有办法评估网络,这样就导致了那个蛋碎的感叹号一直存在,以及WiFi用着用着突然自动连回数据网络了。
  本来我想直接把 isCaptivePortal() 函数给屏蔽掉,让他一直返回成功,但是看了下Google的代码,发现这个函数是非常有用处的,为什么呢?这个函数有个非常重要的作用,那就是判断当前网络是否需要登陆。
  想必大家都连接过那些需要验证才能使用的wifi热点吧,当你们连接这些热点的时候,Android会自动弹出提示询问你是否需要登陆。而这个功能就是依靠了 isCaptivePortal() 这个函数才得以实现,具体原理如下:

  安卓先访问 clients3.google.com/generate_204 这个网址,而这个网址如字面所说,会产生一个 http 204 返回值。204返回值的意思就是空内容。如果当前WiFi是需要登陆才可以连接,那么当试图访问google的服务器的时候,wifi的验证机制一定会自动跳转到一个登陆页面,这个时候http请求的返回值就必然不是204了。就是通过这一机制,便可以区分当前wifi是否需要验证,不得不佩服想出这个办法的人来。
  然而这就导致了如果简单的屏蔽掉这个函数的功能,那么就没有办法自动提示登陆了,但是如果不屏蔽掉那么这个网址被墙掉了,因此会有一个难看的感叹号。想来想去我想到了一个曲线救国的办法,那就是我们把这个网址改成国内的网址不就可以了?我们自己搭一个服务器,来产生这个204返回值给它,问题不就迎刃而解了吗?
那么下面就给出解决方法(此方法无需root):
**** Hidden Message *****
  PS:用此方法修改后,重启后依然有效,换句话说,只要你没有刷机,就一直可用。


huangwang1003 发表于 2014-12-29 15:02

感谢,支持

seasonfull 发表于 2014-12-29 15:04

感谢感谢,不过该怎么改这个啊?

lbc1294961120 发表于 2014-12-29 17:14

感谢楼主分享

huoxiezi 发表于 2014-12-29 22:39

谢谢楼主分享

daqipiao 发表于 2014-12-30 07:25

给大牛顶顶。

dbsk_5best 发表于 2014-12-30 10:05

求大神指点迷津~ 我现在是真的已经搞不清楚在用什么流量上网了~

edison17 发表于 2014-12-30 17:49

kankankankan

tonywangbo 发表于 2014-12-30 20:54

向楼主墙角

caoyulotus 发表于 2014-12-30 21:34

感谢分享,试试看能弄好不
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: Android 5.0 WiFi和信号图标出现感叹号的解决办法