java - 当 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,我应该怎么做才能强制使用蜂窝数据?
解决方案
推荐阅读
- flutter - 如何使用颤振 firebase_ml_vision 裁剪面部轮廓?任何其他方式来实现这一目标?谢谢
- python - Python CrashCourse:生成多个随机游走
- sql - 将此查询转换为视图 - 不允许声明/设置
- sql - 在 Oracle DB 中过滤联接
- java - 如何使用 Single Live Event 打开包含 Room 数据的对话框片段?
- python - 如何将不和谐频道与python链接
- azure-sql-database - 从 Azure SQL 弹性作业步骤中发送电子邮件
- c++ - WinHttpAddRequestHeaders:在标头中发送证书时为87 - C++
- ethereum - 更新实时智能合约
- javascript - D3 json() 函数适用于本地文件,但不适用于将本地 var 设置为 json