我是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是否包含包含属性的元素?还是我的问题有其他解决方案?
您可以使用需要lambda的none
函数。然后,您可以在唯一属性上设置条件。
if (mLeDevices.none { it.BSSID == result.BSSID }) {
mLeDevices.add(result)
}