Android 10+ (API 29+) 以编程方式在后台连接到 Wi-fi

问题描述

在我的 Flutter 应用程序中,我使用原生 Android 代码(在 Kotlin 中)以编程方式连接到特定的 Wi-Fi。对于 Android 10+,我需要使用网络说明符。它有效,但前提是应用程序在前台。在后台,我总是以 onUnavailable 回调结束。

在我的特定用例中,该应用连接到非常不稳定的 Wi-Fi(它始终关闭和打开)。我需要应用程序能够在没有任何用户交互的情况下重新连接,即使显示关闭

有没有办法在后台连接到特定网络?

val specifier = WifiNetworkSpecifier.Builder()
                .setSsid(ssid)
                .setBssid(MacAddress.fromString(macAddressstring))
                .apply {
                  if (isWpa3 != null && isWpa3) {
                    setWpa3Passphrase(password)
                  } else {
                    setWpa2Passphrase(password)
                  }
                }
                .build()

var request = NetworkRequest.Builder()
              .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
              .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
              .setNetworkSpecifier(specifier)
              .build()


this.networkCallback = object : ConnectivityManager.NetworkCallback() {

      override fun onAvailable(network: Network) {
        super.onAvailable(network)
        connectivityManager.bindProcesstoNetwork(network)
       
        // Success
      }

      override fun onUnavailable() {
        super.onUnavailable()

        // Unavailable
        
        // Always end up here with display off
      }

    }
    // Defined elsewhere
    connectivityManager.requestNetwork(request,networkCallback)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)