WifiManager getConnectionInfo() 在 Android API 级别 31 中已弃用

Ran*_*dav 7 android wifimanager android-wifi android-11

我们使用 Wifimanger getConnectionInfo() 方法来获取连接的 wifi 的 SSID 和 BBSID。但从 Andorid API level 31 开始,Android 已弃用 getConnectionInfo() 方法。

他们提供的使用 getTransportInfo() 的解决方案需要最低 Android 级别 29,这是我们无法确定的目标,因为我们 20% 的用户仍然使用低于 29 的 Android API 级别。

有人可以帮助使用替代方法来连接 wifi。

https://developer.android.com/reference/android/net/wifi/WifiManager#getConnectionInfo()

Wei*_*ang 4

你可以用NetworkCallback()它代替。您需要传递FLAG_INCLUDE_LOCATION_INFONetworkCallback(),否则您只会得到“未知 ssid”。此外,您还需要 ACCESS_NETWORK_STATE 和 ACCESS_FINE_LOCATION 权限才能使其正常工作。

            val request = NetworkRequest.Builder()
                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                .build()
            val networkCallback = object : ConnectivityManager.NetworkCallback(
                FLAG_INCLUDE_LOCATION_INFO) {
                override fun onCapabilitiesChanged(
                    network: Network,
                    networkCapabilities: NetworkCapabilities
                ) {
                    super.onCapabilitiesChanged(network, networkCapabilities)
                    val wifiInfo = networkCapabilities.transportInfo as WifiInfo
                    val ssid = wifiInfo.ssid
                }
            }
            connManager.registerNetworkCallback(request, networkCallback)
Run Code Online (Sandbox Code Playgroud)

请参阅:https://developer.android.com/reference/kotlin/android/net/wifi/WifiManager#getConnectionInfo()