在Android API级别31中,WifiManager的getConnectionInfo()方法已被弃用。

7
我们使用WifiManager的getConnectionInfo()方法获取已连接wifi的SSID和BBSID。 但是从Android API级别31开始,Android已弃用getConnectionInfo()方法。
他们提供的解决方案是使用getTransportInfo()方法,该方法需要最低Android版本29,但我们无法将目标设置为该版本,因为我们仍有20%的用户使用低于API级别29的Android。
是否有人可以提供替代方法以获取连接的wifi?
参考链接:https://developer.android.com/reference/android/net/wifi/WifiManager#getConnectionInfo()
1个回答

4
你可以使用 NetworkCallback() 替代。 你需要在 NetworkCallback() 中传递 FLAG_INCLUDE_LOCATION_INFO,否则你只能得到 "unknow 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)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接