API 23以下版本中,BroadcastReceiver内如何判断WiFi扫描是否成功
API 23 以下版本获取 WiFi 扫描完成状态的方案
在 API 23(Android 6.0)及以上版本,我们可以通过WifiManager.EXTRA_RESULTS_UPDATED直接判断扫描是否成功,但这个字段在更低版本中不存在,需要换一种方式处理:
- 依旧监听
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION广播事件 - 在广播接收器的
onReceive方法中,调用WifiManager.getScanResults()获取扫描结果,通过结果是否有效来判定扫描状态
具体代码实现如下:
val wifiScanReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager val scanResults = wifiManager.scanResults // 以扫描结果非空作为扫描成功的判定依据 val success = scanResults.isNotEmpty() if (success) { scanSuccess() } else { scanFailure() } } }
补充说明
这种方式无法严格区分「扫描操作本身失败」和「扫描成功但无可用WiFi信号」的场景。如果需要更精准的判断,可以在发起扫描时记录时间戳,在广播回调中对比当前时间,若超出合理时长仍未得到有效结果,则判定为扫描失败。
内容的提问来源于stack exchange,提问作者morteza mgh
相关产品推荐
相关产品推荐

