android获取wifi名称

直接上代码再说明一下,有时一直获取的问题,

fun startWifiListener(){if(isRunningWifiChangeListener){return}isRunningWifiChangeListener = trueif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { //android12以上监听修改wifival request = NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build()val connectivityManager = this.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManagerval networkCallback = object : ConnectivityManager.NetworkCallback(FLAG_INCLUDE_LOCATION_INFO) {override fun onCapabilitiesChanged(network: Network,networkCapabilities: NetworkCapabilities) {val wifiInfo = networkCapabilities.transportInfo as WifiInfoval ssid = WifiSupport.getWifiName(wifiInfo.ssid)Log.e(TAG,"initListener Changed ssid: ${ssid}")// android13 ssid 经常是if (BeehiveContact.BEEHIVE_HOTSPOT == ssid) {//wifi连接到指定名称后的操作 dosomething()isRunningWifiChangeListener = false}super.onCapabilitiesChanged(network, networkCapabilities)connectivityManager.unregisterNetworkCallback(this)}}doAsync {while (isRunningWifiChangeListener) {connectivityManager.registerNetworkCallback(request, networkCallback)Thread.sleep(10000)}}}else { //android12以下定时获取当前wifi信息doAsync{while (isRunningWifiChangeListener){var ssid = WifiSupport.getConnectionInfo(this@RestartBeehiveActivity2).ssidssid = WifiSupport.getWifiName(ssid)Log.e(TAG, "initListener while: ${ssid}" )if(BeehiveContact.BEEHIVE_HOTSPOT == ssid){uiThread {//wifi连接到指定名称后的操作 dosomething()}isRunningWifiChangeListener = false}else {Thread.sleep(10000)}}}}}
/*** Build.VERSION_CODES.S以前*/fun getConnectionInfo(context: Context): WifiInfo{val wifimanager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManagerreturn wifimanager.connectionInfo}
/*** 从跳转页面,返回结果,监听*/private val requestDataLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {mContext?.let {(it as RestartBeehiveActivity2).startWifiListener()}}

android12以前用,wifimanager.getConnectionInfo(), android12以后用注册wifi变换的监听,但是有两个问题会返回

1、没有使用FLAG_INCLUDE_LOCATION_INFO会获取不到名称,一定要加上,如上面代码ConnectivityManager.NetworkCallback(FLAG_INCLUDE_LOCATION_INFO)。

2、如果在修改wifi时,app退到后台,此时监听会生效,但是名称是,所以在需要app退到后台这种情况下,可以在返回app后再注册监听,这里返回当前wifi信息名称就对了。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部