关于ANDROID5.0-7.1.2网络图标上的感叹号及其解决办法

 admin   2022-09-25 11:30   108 人阅读  0 条评论

Bb3恶棍源代码在此:

新一代版浏览门牌号:

Google又玩我23333

自7.1.2(早已开始?),captive_portal_detection_enabled增设已被弃置,那时改成了captive_portal_mode快捷键,该快捷键可增设为下列3种值:

0:全盘停止使用检验(Don’t attempt to detect captive portals.)1:检验到须要登入则快捷方式告诫(缺省)(When detecting a captive portal, display a notification that prompts the user to sign in.)2:检验到须要登入则手动接上此领涨板块并无须手动相连(When detecting a captive portal, immediately disconnect from the network and do not reconnect to that network in the future.)

Bb3恶棍早已预览以全力支持该版。

假使之后Google千万别再合情理了233333

非常感谢 jingyu9575 的协助

从7.1.1早已开始,检验用的伺服器门牌号存储文件格式出现了变动,改成了:

private static String getCaptivePortalServerHttpsUrl(Context context) { return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, DEFAULT_HTTPS_URL);}

public static String getCaptivePortalServerHttpUrl(Context context) { return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, DEFAULT_HTTP_URL);}

可以看到,系统不会手动加入generate_204″的后缀了,这意味着url可以设计的更加灵活,同时也意味着在增设的时候须要填入完整的url:

adb shell "settings put global captive_portal_https_url "

当然如果只有http的话,可以执行:

adb shell "settings put global captive_portal_use_https 0"adb shell "settings put global captive_portal_http_url "

复原方法见下文。

须要伺服器全力支持https。

或者使用命令

adb shell "settings put global captive_portal_use_https 0"

停止使用https即可。

恢复可用

adb shell "settings put global captive_portal_use_https 1"

或者

adb shell "settings delete global captive_portal_use_https"

升级了安卓5.0的同学们一定对互联网工具栏上面的那个感Bb3感到十分郁闷。安卓5.0引入了一种新的互联网评估机制来评估互联网状况,当你有互联网请求时会手动选择互联网相连条件最好的一个互联网进行相连。该机制的代码实现如下:

简要来说就是,如果该互联网是VPN,那么直接使用这个互联网进行相连,否则调用 isCaptivePortal() 函数进行互联网状况的判定,再根据判定结果决定是否选用此互联网。 而罪魁祸首就是这个 isCaptivePortal() 函数,它会访问 并根据返回结果来判断互联网联通状况。正是这个google的网址被墙导致安卓没有办法评估互联网,这样就导致了那个蛋碎的感Bb3一直存在,和wifi用着用着突然手动连回数据相连了。

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

想必大家都相连过那些须要验证才能使用的wifi领涨板块吧,当你们相连这些领涨板块的时候,android会手动弹出提示询问你是否须要登入。而这个功能就是依靠了 isCaptivePortal() 这个函数才得以实现,具体原理如下:

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

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

1.完全屏蔽互联网检查功能,最简单快速,但是就没有办法提示wifi登入:

adb shell "settings put global captive_portal_detection_enabled 0"

2.用国内的伺服器替换掉google的伺服器:

adb shell "settings put global captive_portal_server "

这个伺服器是我自己建的,也就是本站: 我在伺服器上写了个简单的204页面,网址是 只要用这个网址替换掉google的网址,就可以正常访问并检验互联网状态了。不过由于本人的伺服器速度并不快,所以感Bb3还是会显示一小会儿的,不过应该很快就会消失。

对于第一条指令,恢复默认只须要执行:

adb shell "settings put global captive_portal_detection_enabled 1"

或者

adb shell "settings delete global captive_portal_detection_enabled"

第二条指令的恢复直接delete即可:

adb shell "settings delete global captive_portal_server"

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

是不是看着很舒服呢?烦人的感Bb3没有了~

经过靠谱的确认,该修改方式具有持久性,重启依旧有效,除非刷机或者清除数据。

1. 对于apache伺服器,如果你的伺服器安装了rewrite模块,那么只须要在网站的.htaccess中加入下列代码:

2. 对于nginx,直接加入下列增设即可:

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

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

浏览门牌号

新一代版请移步:

NoExclamation Portal Server 修改器 1.2

3010 Downloads

NoExclamation Portal Server 修改器 2.0

Bb3恶棍 2.0

全力支持 Android 7.1.1

1.5

修正了应用崩溃的问题

1.4

增加工具栏替换网址为英文网址优化了重置网址功能优化界面,在修改网址时不会导致界面卡顿

3809 Downloads

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

by fengz: V2EX建立的服务,速度不错,稳定性也很不错,具体信息请查看

by lkebin: 架设于LeanCloud伺服器,据lkebin称是永久有效

by Zohar: 热心网友的个人站点

本文地址:http://51ac.top/post/31748.html
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?