В настоящее время вариант использования примерно такой: мы должны поддерживать соединение 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?