wifi扫描仪广播接收器仅注册一次但不断返回结果

问题描述 投票:0回答:1

这是我的广播接收器,取自 wifi 管理器文档:

private val wifiScanReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent?) {
        val success = intent?.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false) ?: false
        Log.d("WifiManager", "In on receive $success with scan number: $scanId")

        if (success) {
            scanSuccess()
        } else {
            scanFailure()
        }
        // unregisterWifiReceiver()
    }
}

我在 on create 方法中注册 wifi 接收器,并在每次单击按钮时调用开始扫描。但是,即使我只单击该按钮一次,我也会返回连续扫描。这是一个问题,因为我将这些值存储在数据库中,并且我得到了重复项,尽管有时

level
值是不同的。

我设法解决此问题的唯一方法是在扫描成功后立即取消注册 wifi 接收器,然后每次单击按钮时创建一个接收器。我不确定是否需要存储所有这些值 - 为什么

level
会波动以及为什么它会返回这么多结果?我用它来进行 WiFi 指纹识别,因此级别非常重要。

android kotlin wifimanager
1个回答
0
投票

onReceive 不仅会获取 startScan() 生成的结果,还会获取所有其他扫描,包括系统本身启动的定期扫描。因此,在发出 startScan() 时设置一个标志,并在获取结果时重置该标志。未设置标志时忽略结果。

(旁白:考虑使用 WifiManager.ScanResultsCallback for API level >= 30)

© www.soinside.com 2019 - 2024. All rights reserved.