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) {