在开发安卓应用时,APP需要使用内网的wifi,但是内网的wifi是没有互联网能力的。又因为手机的移动网络都是默认启用的,APP会走移动网络从而导致APP不能正常使用,所以需要将APP强制使用内网wifi。 在连接完内网wifi后,使用了如下代码:
connectivityManager.bindProcessToNetwork(network)
结果发现,有时候APP在连接wifi一段时间后,就不能进行内网访问,但是wifi连接是正常的。报错信息如下:
OS Error: Machine is not on the network, errno = 64
最后查看bindProcessToNetwork的使用说明:
将当前进程绑定到指定网络。此后创建的所有Socket(未通过来自Network.getSocketFactory()的已绑定SocketFactory显式绑定的Socket)均将被绑定到该网络。同时,所有主机名解析也将被限制在该网络范围内。需注意,若该网络断开连接,以这种方式创建的所有Socket将停止工作,且所有主机名解析均会失败。此为设计预期行为,目的是避免应用意外使用其认为仍绑定到特定网络的Socket。如需清除绑定,可将network参数设为null。
原来,在wifi连接期间,如果断开又重连,会导致网络异常。 最终,直接在APP使用期间开启wifi网络监听,在连接时,使用
connectivityManager.bindProcessToNetwork(network)
在wifi断开时,使用
connectivityManager.bindProcessToNetwork(null)
至此,问题解决!