【小常识】为什么类原生ROM的WiFi上有个叉号

【小常识】为什么类原生ROM的WiFi上有个叉号:刷了类原生的ROM,WiFi和数据流量上总是有个×号,明明可以连接网络,系统却偏偏说不能,究竟是为什么呢?


Android为了对网络状态进行检测,采用了一种叫做captive detection的方式进行网络状态检测。

其实说起来很简单,每当连接到一个网络,比如移动数据网络或者WIFI的时候,Android的NetworkMonitor模块会构造一个http/https的请求,发送到指定的服务器,然后利用收到的响应进行网络状态判断。

网络状态有如下几种状态:
1) 根本就没有返回,这种情况代表当前没有Internet访问;参见图1左图。
2) 返回状态码204,这种情况代表具备完整的Internet访问(特定的服务器专门返回204的状态码);
3) 除204以外的其他大于200而小于400的状态码,这种状态码一般代表需要进行Web登录的网络连接,比如机场、商场提供的需要短信登录的网络。这种情况下Android会构造一个可能需要登录的状态栏通知以通知用户可能需要进行登录。

类原生默认的204服务器由谷歌提供,所以,在我国大陆区不可访问。因此,不要再见到WiFi的叹号就向ROM作者反馈bug啦,那根本就不是bug!

那么,如何解决这个问题呢,毕竟强迫症忍不了哇对不对。这里推荐一个神器,叫做“叹号杀手”,请各位自行度娘之。

或者,对于开发者来说,我们可以修改源码,从源头上解决这个问题,可参考本人以前发过的文章:修改类原生ROM源码消除wifi叹号

文章目录
,