首页 > 解决方案 > 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)

标签: androidkotlinandroid-wifi

解决方案


推荐阅读