【问题标题】:Binding to cellular network with bindProcessToNetwork does not work使用 bindProcessToNetwork 绑定到蜂窝网络不起作用
【发布时间】:2020-03-13 00:55:06
【问题描述】:

我正在尝试按需绑定到蜂窝网络(wifi 仍在运行)。我有以下代码:

            override fun onAvailable(network: Network) {
                super.onAvailable(network)
                Toast.makeText(this@MainActivity, "CELLULAR READY", Toast.LENGTH_SHORT).show()
                Log.e("darran", "network info is: " +connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE))
                Log.e("darran", "network is metered: " +connectivityManager.isActiveNetworkMetered)
                Log.e("darran", "bind is tru: " +connectivityManager.bindProcessToNetwork(network))
                Log.e("darran", "bound network is: " +connectivityManager.boundNetworkForProcess)
                GlobalScope.launch {
                    fetchIp(network)
                }
            }

当我尝试在 wifi 启动时绑定到蜂窝网络时,boundNetworkForProcess 不是蜂窝网络,但仍然是 wifi 网络。

如果我禁用 wifi 网络,这将每次都有效。

我在以太网和 wifi 之间立即绑定也没有问题。即使网络可用,移动数据似乎也无法按需绑定。无论其他网络的状态如何,如何立即绑定到蜂窝网络?

完整的项目在这里:

https://github.com/dazza5000/network-switch-poc/blob/master/app/src/main/java/com/fivestars/networkswitchpoc/MainActivity.kt

【问题讨论】:

    标签: android android-networking android-connectivitymanager


    【解决方案1】:

    Android 通过开发者选项公开了一个属性,可让您保持移动数据始终处于活动状态。启用此标志可让您在 wifi 和蜂窝数据连接之间切换,并立即在请求的网络上发出成功的网络请求。

    这个标志也被定义为一个全局设置。

    Settings.Global.MOBILE_DATA_ALWAYS_ON

    https://github.com/aosp-mirror/platform_frameworks_base/blob/e80b45506501815061b079dcb10bf87443bd385d/services/core/java/com/android/server/ConnectivityService.java#L951

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多