1

我知道我的用户连接到没有互联网的 wifi,所以我将 Android 进程绑定到蜂窝:

 private fun bindProcessToCellular() {
        val req = NetworkRequest.Builder()
        req.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)

        cm.requestNetwork(req.build(), object : ConnectivityManager.NetworkCallback() {
            override fun onAvailable(network: Network) {
                if (cm.bindProcessToNetwork(network)){
                    // YAY, process bound to cellular                    
                }
            }
        })
    }

现在,这在 Kotlin/Android 上完美运行 - 互联网请求通过 Android/Kotlin 代码的蜂窝按预期运行,但不是来自我的 gomobile 库。在 Go 中,请求只是超时。如果我断开 wifi,所有 Go 请求都会成功,这让我认为 Go 以某种方式解决了错误的网络。

我的理解是 gomobile 在 Andoroid JNI 接口上运行,我的直觉是bindProcessToNetwork绑定所有东西,包括向该应用程序的 JNI 接口运行的组件。

有人知道这里可能发生了什么吗?

4

1 回答 1

1

可能的解决方法:

当用户第一次连接到这个wifi(没有互联网)时,操作系统会询问用户“这个wifi没有互联网,你还想连接吗?” 如果用户随后取消,设备实际上仍连接到该 wifi,但流量仍通过蜂窝路由,包括在 Go 中创建的请求。

于 2020-05-12T09:21:00.947 回答