Android BLE ScanResult 列表处理

Android BLE ScanResult List processing

我是 Android 和 Kotlin 的新手,我在列出发现的 BLE 设备时遇到了困难。 当找到 BLE 设备时,将触发 onScanResult 回调,找到的 BLE 设备的数据可用作 class ScanResult.

要列出所有可用的 BLE 设备,我有一个 mLeDevices: ArrayList<ScanResult> = ArrayList() 如果找到的设备不在列表中,则将其添加到哪里。

private val bleCallback: ScanCallback = object :ScanCallback() {
    override fun onScanResult(callbackType: Int, result: ScanResult) {
        super.onScanResult(callbackType, result)

        if (!mLeDevices.contains(result)) {
            mLeDevices.add(result)
        }
    }
}

但是使用此代码,每个设备都会多次添加到列表中,因为 ScanResult 还包含不断变化的 RSSI 值。我想我必须检查 mLeDevices 是否包含 result.device.address。如果是,只需更新 rssi 值,如果不是,则将新设备添加到列表中。但我不知道如何以最好的方式实施这种方法。 Kotlin 中有没有办法检查 class 的 ArrayList 是否包含包含属性的元素?或者我的问题有其他解决方案吗?

您可以使用带有 lambda 的 none 函数。然后,您可以在唯一属性上设置条件。

if (mLeDevices.none { it.BSSID == result.BSSID }) {
   mLeDevices.add(result)
}