Используйте сотовые данные для inte rnet, когда Wi-Fi и сотовые данные включены, а Wi-Fi не имеет подключения inte rnet - PullRequest
1 голос
/ 10 июля 2020

В настоящее время вариант использования примерно такой: мы должны поддерживать соединение Wi-Fi P2P, и когда некоторый обратный вызов получен с использованием соединения Wi-Fi P2P, мы должны sh это использовать для API с использованием сотовых данных без разрыва соединения Wi-Fi P2P .

Wi-Fi не имеет rnet подключения, поэтому обязательно использовать сотовые данные для pu sh, получившего сообщение для 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
}
}

Когда я подключаю свое устройство к Wi-Fi с помощью точки доступа с другого устройства, которое не имеет rnet подключения, и включаю сотовые данные, я получаю «False» в «isConnected ()».

Что мне делать, чтобы принудительно использовать сотовые данные, даже когда устройство подключено к Wi-Fi?

...