fix(ble): 搜索列表不再跳动,设备按首次发现顺序稳定展示
两处根因:列表按 RSSI 排序,信号逐包抖动导致卡片反复换位; 变更签名含 RSSI,同一设备每收到一个广播包就整表刷新。 改为组内保持插入序(00F4 服务命中组仍排前),签名剔除 RSSI。
This commit is contained in:
parent
ccb088ba9c
commit
461bfc748b
|
|
@ -106,9 +106,9 @@ export function createBluetoothDiscovery(options = {}) {
|
|||
return left.hasTargetService ? -1 : 1
|
||||
}
|
||||
|
||||
const leftSignal = typeof left.RSSI === 'number' ? left.RSSI : -999
|
||||
const rightSignal = typeof right.RSSI === 'number' ? right.RSSI : -999
|
||||
return rightSignal - leftSignal
|
||||
// 同组内保持首次发现顺序(对象键插入序稳定)。
|
||||
// 不按 RSSI 排序:信号强度逐包抖动会让卡片反复换位跳动
|
||||
return 0
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -248,13 +248,13 @@ export function createBluetoothDiscovery(options = {}) {
|
|||
function getDeviceStableSignature(device = {}) {
|
||||
return [
|
||||
device.deviceId || '',
|
||||
device.RSSI ?? '',
|
||||
device.name || '',
|
||||
device.localName || '',
|
||||
Array.isArray(device.advertisServiceUUIDs)
|
||||
? device.advertisServiceUUIDs.map((item) => normalizeUuid(item)).sort().join('|')
|
||||
: '',
|
||||
device.advertisData ? JSON.stringify(Array.from(new Uint8Array(device.advertisData))) : ''
|
||||
// RSSI 逐包抖动,不参与变更签名:避免同一设备反复触发列表刷新
|
||||
].join('#')
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue