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

问题描述 投票:0回答:1

我们使用 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()

android android-wifi android-11 wifimanager
1个回答
4
投票

您可以使用

NetworkCallback()
代替。 您需要将
FLAG_INCLUDE_LOCATION_INFO
传递给
NetworkCallback()
,否则您只会得到“未知 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)

请参阅此处

© www.soinside.com 2019 - 2024. All rights reserved.