From 461bfc748bc223ccdbafe5735dde6b56f7c2ed62 Mon Sep 17 00:00:00 2001 From: ozh Date: Thu, 15 Oct 2026 11:09:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(ble):=20=E6=90=9C=E7=B4=A2=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E4=B8=8D=E5=86=8D=E8=B7=B3=E5=8A=A8=EF=BC=8C=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=8C=89=E9=A6=96=E6=AC=A1=E5=8F=91=E7=8E=B0=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E7=A8=B3=E5=AE=9A=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 两处根因:列表按 RSSI 排序,信号逐包抖动导致卡片反复换位; 变更签名含 RSSI,同一设备每收到一个广播包就整表刷新。 改为组内保持插入序(00F4 服务命中组仍排前),签名剔除 RSSI。 --- src/ble/discovery.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ble/discovery.js b/src/ble/discovery.js index 56d595d..5985aeb 100644 --- a/src/ble/discovery.js +++ b/src/ble/discovery.js @@ -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('#') }