尝试在没有Internet连接的情况下连接到运行在WiFi网络上的网络服务器。
我能够连接到IOT设备的网络,并通过一些请求。但是,几秒钟后,我从操作系统中弹出一个对话框,说wifi连接没有互联网。我忽略了该弹出窗口,无法再访问Web服务器。
我查看了OkHttp源代码,发现问题的根源是UnknownHostException。
我知道,从Android 5开始,如果没有互联网连接,流量将不会通过wifi传输。 OkHttp通过允许将套接字工厂设置为给定网络来提供解决方案。
这是我的代码示例,用于创建OkHttp客户端。
val builder = OkHttpClient.Builder()
builder.proxy(Proxy.NO_PROXY)
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val wifiNetwork = connectivityManager.allNetworks.firstOrNull {
connectivityManager.getNetworkInfo(it).let { info ->
info.type == ConnectivityManager.TYPE_WIFI && info.isConnected
}
}
wifiNetwork?.also {
builder.socketFactory(it.socketFactory)
}
return builder.build()
我正在使用在Android 8.1上运行OkHttp 3.11.0。