看到标题你可能不知道我说的是什么鬼东西,但是如果你有类似的经历的话,那么恭喜你,也恭喜我自己,终于解决这个问题了。
用过小米、华为等手机的都知道,当我们连接上一个不能上网的WIFI时,系统都会友好的给出 “此WLAN无法访问互联网,请更换网络/切换为移动数据网络” 等类似的提示,今天我就说下本人在这里面遇到的坑。
背景
有个Android项目需要连接硬件设备的WIFI,然后通过socket进行通信,我这边已经开发完成,也测试过功能都是没问题的,然后给客户那边测试,客户那边有台手机打死连接不上设备。 首先确认代码是没问题的,在其他多台手机上跑也是正常的。 另外就是在连接设备(不是指连接硬件设备发射 的WiFi,而是指通过TCP进行长连接通信)前需要先进行UDP广播,通过广播找到设备相关,获取设备信息,这一步也没问题。 然后在拿到设备的IP和端口后,进行TCP长连接,问题就卡在这里了,一直是SocketTimeoutException 连接超时,试过无数办法也没用,无奈只要让客户把手机寄过来,现场调试。
问题手机信息:小米4,Android 6.0,MIUI9.6。
调试流程
硬件设备在发射WIFI信号时,去连接这个WIFI(这个WIFI是没网的),然后手机连接WIFI成功了,这里注意是连接成功了,然后过几秒提示“此WLAN网络无法访问互联网”,这个提示是在手机通知栏提示的(有些手机是直接弹窗提示的),当时没在意,然后连接TCP,连不上,因为之前测过多次,基本认定出现这问题跟手机有关,所以我把注意放到这个提示上了,我点击了提示,选择了“使用此WLAN”按钮,然后再起尝试连接TCP,神奇的事情发生了,这次连接成功了,然后又尝试了多次,总结出规律:
只要在WLAN设置界面开启了“WLAN助理 (在WLAN连接不佳加时智能选择WLAN或移动数据网络)”**,就会在通知栏弹提示,这时候所有的TCP连接都将失败(ping也ping不通,具体原因不明,有知道的大佬望解答),但是UDP连接却没问题,将WLAN助理 关闭后,在连接该WIFI,就不会有这样的提示了,这时候TCP连接就完全正常。
这个bug困扰了一周,总算是找到问题解决了。我不知道是不是只有这一个还是这一批手机都是这样的,因为我拿别的小米手机(MIX2S、红米4等)和华为手机(荣耀9,Mate7)虽然有这样的无法连接网络的提示,但是都没有无法连接TCP这样的问题。 遇到这样的BUG也是心累,也希望小米的工程师能优化下这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179424.html原文链接:https://javaforall.cn