Android BLE ScanResult列表处理

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

我是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中,有没有一种方法可以检查类的ArrayList是否包含包含属性的元素?还是我的问题有其他解决方案?

class kotlin arraylist element contains
1个回答
0
投票

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

if (mLeDevices.none { it.BSSID == result.BSSID }) {
   mLeDevices.add(result)
}
© www.soinside.com 2019 - 2024. All rights reserved.