From b0ba12034c3c3b06397aaa4f87f62e6ddcaee729 Mon Sep 17 00:00:00 2001 From: ozh Date: Wed, 9 Sep 2026 18:22:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(ble):=20=E5=81=9C=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=85=88=E5=90=8C=E6=AD=A5=E7=BF=BB=E8=BD=AC=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=86=8D=E5=81=9C=E5=8E=9F=E7=94=9F=E6=89=AB=E6=8F=8F=EF=BC=8C?= =?UTF-8?q?=E6=B6=88=E9=99=A4=E7=AD=89=E5=BE=85=E5=9B=9E=E8=B0=83=E7=9A=84?= =?UTF-8?q?=E5=8D=A1=E9=A1=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - stopSearch:setSearching(false) 提到 stopBluetoothDevicesDiscovery 之前, searchSessionId 已递增、事件已关闭,先翻转状态是安全的; 部分机型原生停扫回调慢,等它完成才更新 UI 会让按钮长时间停在 "搜索中"并串行阻塞连接等后续操作 - connectDevice:仅在搜索进行中才停搜索,避免每次连接都白白 调一次原生停扫接口 --- src/ble/discovery.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/ble/discovery.js b/src/ble/discovery.js index 56d595d..eee35fc 100644 --- a/src/ble/discovery.js +++ b/src/ble/discovery.js @@ -677,13 +677,16 @@ export function createBluetoothDiscovery(options = {}) { searchSessionId += 1 acceptingDeviceEvents = false - await stopDiscoverySilently() - - // 暂停搜索保留已发现的设备数据,不做 resetDeviceMap + // 先同步翻转搜索态,再异步停原生扫描: + // stopBluetoothDevicesDiscovery 在部分机型回调慢,若等它完成才 setSearching(false), + // 期间按钮仍显示"搜索中"、连接/二次搜索等后续操作全部被串行拖住(感知为卡顿)。 + // searchSessionId 已递增、事件已关闭,翻转状态不会引入新的扫描事件 setSearching(false) if (showStopToast) { showToast('已停止搜索') } + + await stopDiscoverySilently() } function pickPreferredDeviceId(deviceId) { @@ -717,7 +720,11 @@ export function createBluetoothDiscovery(options = {}) { async function connectDevice(deviceId) { await ensureInitialized() - await stopSearch(false) + // 搜索进行中点击"网络配置":立即停搜索(状态同步翻转,不等原生回调), + // 否则 createBLEConnection 会被扫描信道占用拖慢甚至失败 + if (isSearching) { + await stopSearch(false) + } const targetDeviceId = pickPreferredDeviceId(deviceId) if (!targetDeviceId) {