Android 网络图标感叹号解决方法

去年10月份 Google 发布 Android 5.0 操作系统,新系统有着很多令人称赞的新功能,相信不少朋友会尝试去升级更新。

portal_detection_pic5    portal_detection_pic4

Google 在新系统中加入了网络的检测机制,在原生系统当中,它通过连接 Google 服务器来测试网络连通状况,如果无法联通,会在网络中提示受限,显示为网络图标右下角为小感叹号。

这种设计的用意在于如果它发现 WiFi 网络受限或无连接,而且设备有移动网络可用,可以自动切换到2G/3G/LTE,让设备保持联网。

不过由于你懂得原因,Google 服务器无法访问,这就会导致提示网络受限,而且因为不断地向网络发包,还会消耗流量和影响手机续航时间。

解决方法

1 下载ADB调试工具,安装手机驱动,打开手机开发者选项中的“USB调试”开关。

2 命令提示符(Windows)或者终端(Mac OS X)运行ADB工具,在手机上同意信任调试设备,并确认手机连接成功。

3 使用以下命令,用国内的服务器替换掉 Google 的服务器:

Andriod 7.1.1之后,请使用:

4 打开飞行模式再关闭,即可去除感叹号。

portal_detection_pic6    portal_detection_pic3

一些其他服务器

如果你对我提供的服务器速度不满意,你还可以尝试以下服务器地址:

以上网址网络收集得到,如果给提供者带来不便之处请回复告知,我会尽快删除。

如何搭建一个自己的检测服务器

你看你就是一个爱折腾的人,也叫极(zhuang)客(bi)。

1 Apache服务器,如果你的服务器安装了rewrite模块,那么只需要在网站的.htaccess中加入以下代码:

2 nginx服务器,在配置文件中填入以下代码:

3 SAE平台,在config.yaml中添加以下代码:

4 强行空文件法

直接在网站的根目录下建立一个叫做 generate_204 的空文件即可,因为如果返回的内容为空那么也会当成 204 来处理。

根据国内开发者小狐狸的解释,该机制运行方式如下:

portal_detection_pic1

简要来说就是,如果该网络是 VPN ,那么直接使用这个网络进行连接,否则调用 isCaptivePortal() 函数进行网络状况的判定,再根据判定结果决定是否选用此网络。 而罪魁祸首就是这个 isCaptivePortal() 函数,它会访问 clients3.google.com/generate_204 并根据返回结果来判断网络联通状况。

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

portal_detection_pic2

如果当前 WiFi 是需要登录才可以连接,那么当试图访问 Google 的服务器的时候,WiFi 的验证机制一定会自动跳转到一个登录页面,这个时候 HTTP 请求的返回值就必然不是 204。就是通过这一机制,便可以区分是否需要验证。

11 条评论

点击这里取消回复。

昵称
  1. FiveYellowMice

    唔, Nginx 的配置的话,应该是 location = /generate_204 { return 204; } 更合适些,这样才是只有在 /generate_204 的地方才会匹配,没有等号的话,只要是 /generate_204 开始的路径都会出来 204 了。

    1. 欣欣

      好耶,谢谢黄鼠

  2. Pingback: Android 5.0 网络图标感叹号解决方法 | 烧饼的小院

  3. flippy

    好科技!!

  4. punderson

    [xieyan] [xieyan] [xieyan] 晓岛的网站也行

  5. Dzing

    原声棒棒糖还是不错的,用起来流畅

  6. 张杰

    [xieyan] 其实有感叹号也好,可以提示翻墙有没有成功

    1. 欣欣

      有些版本会跳回移动数据网络的

      1. Jacky

        因此中过一次枪,好在有流量包顶着 [汗]

        1. 欣欣

          一般来讲手机有开关的,自动切换网络。 [爱你]