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)
}
我是 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)
}