有一个需求,就是要显示连接WIFI的名称。特地记录一下。
1、权限申请:定位权限和WIFI状态访问权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!--访问位置权限-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><!--更改wifi状态权限-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--访问wifi状态权限-->
2、开启权限并获取连接wifi名称
fun getConnectWifiSsid(context: Context): String {
var ssid = ""
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { //android12以上监听修改wifi
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build()
val connectivityManager = context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCallback = object : ConnectivityManager.NetworkCallback(FLAG_INCLUDE_LOCATION_INFO) {
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities
) {
val wifiInfo = networkCapabilities.transportInfo as WifiInfo
ssid = wifiInfo.ssid.replace(""", "").replace("<", "").replace(">", "")
super.onCapabilitiesChanged(network, networkCapabilities)
connectivityManager.unregisterNetworkCallback(this)
}
}
connectivityManager.registerNetworkCallback(request, networkCallback)
} else { //android12以下定时获取当前wifi信息
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
@Suppress("DEPRECATION") val wifiInfo = wifiManager.connectionInfo
ssid = wifiInfo.ssid.replace(""", "").replace("<", "").replace(">", "")
}
return ssid
}
12以下试过没问题,12以上还没有测试过。