OkHttp无法解析物联网上的DNS

时间:2018-11-17 16:43:50

标签: android okhttp3

尝试在没有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。

0 个答案:

没有答案