首页 > 解决方案 > 当 wifi 和蜂窝数据都打开且 wifi 没有互联网连接时,使用蜂窝数据上网

问题描述

目前的用例是这样的,我们必须维护 Wifi P2P 连接,当使用 Wifi P2P 连接接收到一些回调时,我们必须使用蜂窝数据将其推送到 API 而不会中断 Wifi P2P 连接。

Wifi 没有互联网连接,因此必须使用蜂窝数据将收到的消息推送到 API。

我通过搜索类似的 SO 帖子进行了尝试:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    forceConnectionToMobile2()

    button.setOnClickListener {
        Log.v("sahil", "${isConnected()}")
    }
}

fun forceConnectionToMobile2() {
    val connection_manager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val request = NetworkRequest.Builder()
        Log.d("sahil", "request TRANSPORT_CELLULAR")

        request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
        request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)

        connection_manager.requestNetwork(request.build(), object : NetworkCallback() {

            override fun onAvailable(network: Network) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    Log.d("sahil", "binding app to cellular network")
                    connection_manager.bindProcessToNetwork(network)
                }
            }
        })
    }
}

@Throws(InterruptedException::class, IOException::class)
fun isConnected(): Boolean {
    val command = "ping -c 1 google.com"
    return Runtime.getRuntime().exec(command).waitFor() == 0
}
}

当我使用其他没有互联网连接的设备的热点将我的设备连接到 wifi 并打开蜂窝数据时,我在“isConnected()”中得到“False”。

即使设备连接到 Wifi,我应该怎么做才能强制使用蜂窝数据?

标签: javaandroidandroid-layoutkotlinnetworking

解决方案


推荐阅读