如何获取连接的Wifi SSID



我需要连接WiFi的SSID,首先我尝试了这个:

val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiInfo = wifiManager.connectionInfo
textField.text = wifiInfo.ssid

wifiInfo.ssid返回<unknown ssid>时,测试的模拟器与API 30或小米红米Note 8 Pro(Android 11),就像在模拟器与API 27wifiInfo.ssid返回正确的SSID。

然后我试了这个:

val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build()
val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities)
//wifiInfo = networkCapabilities.transportInfo as WifiInfo
Log.d("%%%", "onCapabilitiesChanged: ${networkCapabilities.transportInfo}")
}
}
connectivityManager.requestNetwork(request, networkCallback)
connectivityManager.registerNetworkCallback(request, networkCallback)

networkCapabilities.transportInfo总是null

编辑:

manifest中的权限文件
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

请求OnCreate()的位置权限:

ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1)

并成功授予。

解决1:

我只是忘记在我的手机上打开Geolocation)它解决了问题,而我使用第一个方法采取wifiinfi由wifiManager.connectionInfo,但当我使用第二个由networkCapabilities.transportInfo它仍然返回null,因为第一个方法是Deprecated in java也许它是不好使用它。

那么,我很想听听你对第二种方法的意见。

Google假定知道ssid就意味着知道位置。

去申请好的位置许可,你会看到的。

最新更新