Android WiFi 连接 (Connect,no Internet,带叉)
Android 7.1.2 平台
连接WiFi后,显示connect,no Internet,同时伴有notifaction的通知。
产生现象原因:
frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
frameworks/base/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java
先看NetworkMonitor.java
// Default configuration values for captive portal detection probes.// TODO: append a random length parameter to the default HTTPS url.// TODO: randomize browser version ids in the default User-Agent String.private static final String DEFAULT_HTTPS_URL = "https://www.google.com/generate_204"; //private static final String DEFAULT_HTTP_URL =//"http://connectivitycheck.gstatic.com/generate_204"; private static final String DEFAULT_HTTP_URL =" http://www.noisyfox.cn/generate_204"private static final String DEFAULT_FALLBACK_URL = "http://www.google.com/gen_204";private static final String DEFAULT_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) "+ "AppleWebKit/537.36 (KHTML, like Gecko) "+ "Chrome/52.0.2743.82 Safari/537.36";
可以看到我标红处有两个网络URL,这两个都是用来测试网络是否通的测试地址。
wifi连接成功后会进行验证,如果是要登录需要验证的WiFi,则会弹出验证页面,如果不是,则会登录google服务器请求204验证码,如果返回204则表示网络可以正常连接,此时WiFi图标x会消失并且WiFi显示Connected。由于国内无法访问Google网站,所以默认会存在此问题。
依据网上的一些经验,修改这个url就行了,如下:
选自:https://blog.csdn.net/a567890k/article/details/75103419
将frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java 的DEFAULT_HTTPS_URL 改成 https://www.noisyfox.cn/generate_204
DEFAULT_HTTP_URL 改成 http://www.noisyfox.cn/generate_204
由于这个服务器速度不快,所以X号等提示语要过段时间才消失。要精于求精的话可以找别的服务器,自己搭一个也行
这样的解决方式可行,但在我的这个现状来说有点问题,就是我所在的这个平台将下拉状态栏已经禁用掉了,当弹出notifaction的时候,如果用户点到这个notify,那么系统将会出现异常,很卡,需要重启才能正常。
这时候,采取了另一种方式就是在该notification 创建的之前将其拦截,不让它进行显示(这里还有另一种思路,可以在检测时候需要发送广播创建notification的时候,拦截,不让系统进行广播,这个没有进行验证),
解决如下:在NetworkNotificationManager.java中:
经过这样的过滤后,如果当前系统下拉栏是处于禁止状态,这里也就不会进行notify了。最终验证通过!
ps:
另外,这里在提下网络连接谷歌验证处理的其他方法,
我们上面提到的是修改验证的url,还有另外一种方式就是我们直接禁止网络连接后进行网络连接验证。
可以回到源码处,查看一个测试验证开关如下;
这里直接将这个bool变量置位false,后果如何呢?可以跟踪下,该变量使用的地方,
这里跟上面提到的验证成功,谷歌服务器会返回一个204的码,当该变量置位false,进入if执行段,这里也就直接相当于强制验证成功了。这样做又有另一个bug,就是当连接到真正没有网络连接的WiFi时,显示的还是有网络连接,怎么修改,看大家自己选择吧,顺带提一下,笔者最终采用了在notification创建之前进行拦截,上面提到的是在网络no Internet的时候拦截,后面发现需要登录的网络也会出现上面的现象,最好干脆拦截所有的NotificationType action,可见后面的图。(那么,判断网络是否通的最终是看测试地址是否返回一个204的码,因此这里也反向说明随便找一个国内可访问的地址作为测试地址是不可取的,笔者曾走过这条弯路)。
Android WiFi 连接 (Connect,no Internet,带叉)相关推荐
- android wifi连接流程,(九十三) Android O 连接WiFi AP流程梳理续——保存网络-Go语言中文社区...
前言: 之前在(五十五)Android O 连接WiFi AP流程梳理 梳理连接流程梳理到SupplicantStaNetworkHal 然后没梳理的下去,现在继续梳理下. 之前梳理的时序图 1.流程 ...
- Android Wifi连接控制、TCP、UDP通信,6.0以上适配
本文章包含内容 Wifi连接控制.Wifi广播接收,适配了Android6.0以上的版本 Wifi下的TCP通信 Wifi下的UDP通信 Github项目地址 码云项目地址 最近公司要开发智能家居,A ...
- android wifi连接与断开
android 实现wifi连接与断开 可以完全代替系统设置的wifi管理功能,搜索wifi按照信号强度排序,button刷新,记住密码等功能 源码地址:http://download.csdn.ne ...
- android wifi连接打印机并获取打印机状态
最近在做wifi连接打印机打印小票.如何获取打印机的状态是个问题,简单的写一下大家可以参考一下. /*** 获取打印机状态* @return*/public String getPosStatus() ...
- android wifi连接优先级,Wifi优先级修改
Wifi优先级修改帮助用户修改手机当中各种WiFi网络的优先级,这样在进行多个网络链接之时能够自动的选择优先级更为高的WiFi网络,从而保证你能够有着更好的网络链接,特别是在现在很多WiFi网络较为普 ...
- android WIFI连接开发
这里列了很多,但是大致可以分为四个主要的类ScanResult wifiConfiguration WifiInfo WifiManager (1)ScanResult,主要是通过wifi 硬件的扫描 ...
- android wifi连接手机,Android手机无线连接利器-AirDroid
AirDroid是一款可以在电脑的浏览器上对手机进行管理的应用,需要wifi网络支持,手机安装启用服务后,在pc的浏览器即可登陆进行管理和操作,可以管理联系人.短信.文件.应用.照片.铃声.音乐.通话 ...
- Android Wifi连接 (PEAP)
Wifi PEAP方式的连接与Android的版本有很大关系,三个大的差别对应的版本分别是4.3以下,4.3到6.0之间,以及6.0以上,现在就基于版本分析. 如果要连接wifi,那么得创建WifiC ...
- Android WIFI连接总结
1.setWifiEnable无效? WifiManager.setWifiEnable(true/false)在10以后都没有作用,一直会返回false,可以将targetSdk版本设置到28,可以 ...
- android wifi连接分配ip,android Wifi 设置静态ip地址的方法
调用setIpWithTfiStaticIp()即可为连接好的wifi配置 静态Ip.支持Android4.0以上及以下的版本.(PS:以下的函数使用条件是:wifi是连接好的) 测试成功的 /** ...
最新文章
- python调用数据集mnist_Python读取MNIST数据集
- 让Web站点崩溃最常见的七大原因
- android下raw目录的作用,【android】读取/res/raw目录下的文件
- java中组合_java中组合模式详解和使用方法
- 【强化学习】一文带你理清强化学习
- b 树查找时间复杂度_你心里是没点B树吗?
- IOS之导航控制器与表视图
- Spring Boot 注解描述
- 非常好的关于android安全的博客
- 取汉字拼音首字母的方法
- 电力系统微型计算机继电保护试题,全国2010年4月自考电力系统微型计算机继电保护试题...
- php解密方法,php加密解密的几种方法的使用教程
- Waited long enough for: ServiceRecord 问题解决
- 云服务器几核CPU几G内存几M带宽够用
- 倾斜摄影测量(无人机影像)的三维建模和DSM,DOM的生成(挖坑)
- 写一个函数,输入一个年份,判断是不是闰年
- 宝塔php漏洞,宝塔面板 phpmyadmin 未授权访问漏洞 BUG ip:888/pma的问题分析
- Mac电脑怎么远程桌面连接?
- “%,/,//”的用法
- ArangoDB压测小记