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
|
return left.hasTargetService ? -1 : 1
|
||||||
}
|
}
|
||||||
|
|
||||||
const leftSignal = typeof left.RSSI === 'number' ? left.RSSI : -999
|
// 同组内保持首次发现顺序(对象键插入序稳定)。
|
||||||
const rightSignal = typeof right.RSSI === 'number' ? right.RSSI : -999
|
// 不按 RSSI 排序:信号强度逐包抖动会让卡片反复换位跳动
|
||||||
return rightSignal - leftSignal
|
return 0
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -248,13 +248,13 @@ export function createBluetoothDiscovery(options = {}) {
|
||||||
function getDeviceStableSignature(device = {}) {
|
function getDeviceStableSignature(device = {}) {
|
||||||
return [
|
return [
|
||||||
device.deviceId || '',
|
device.deviceId || '',
|
||||||
device.RSSI ?? '',
|
|
||||||
device.name || '',
|
device.name || '',
|
||||||
device.localName || '',
|
device.localName || '',
|
||||||
Array.isArray(device.advertisServiceUUIDs)
|
Array.isArray(device.advertisServiceUUIDs)
|
||||||
? device.advertisServiceUUIDs.map((item) => normalizeUuid(item)).sort().join('|')
|
? device.advertisServiceUUIDs.map((item) => normalizeUuid(item)).sort().join('|')
|
||||||
: '',
|
: '',
|
||||||
device.advertisData ? JSON.stringify(Array.from(new Uint8Array(device.advertisData))) : ''
|
device.advertisData ? JSON.stringify(Array.from(new Uint8Array(device.advertisData))) : ''
|
||||||
|
// RSSI 逐包抖动,不参与变更签名:避免同一设备反复触发列表刷新
|
||||||
].join('#')
|
].join('#')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue