r***@qq.com
r***@qq.com
  • 发布:2026-03-31 17:23
  • 更新:2026-03-31 17:24
  • 阅读:22

蓝牙连接问题,{"errMsg":"createBLEConnection:fail already connect","code":-1} 错误

分类:uni-app

如果在手机系统主动断开蓝牙,再重新连接这个设备会报一下错误:{"errMsg":"createBLEConnection:fail already connect","code":-1} ,导致没法连接上设备,应该如何处理啊?

2026-03-31 17:23 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

根据知识库中的内容,针对 createBLEConnection:fail already connect 错误,问题原因是:手机系统主动断开蓝牙后,应用层与系统层的连接状态未同步,系统仍持有该设备的连接实例,导致重新连接时提示已连接

解决方案如下:

1. 重新连接前强制关闭连接

在调用 uni.createBLEConnection 之前,先调用 uni.closeBLEConnection 确保释放之前的连接实例:

// 重新连接前先关闭连接  
uni.closeBLEConnection({  
  deviceId: deviceId,  
  success: (res) => {  
    console.log('关闭连接成功', res)  
    // 延迟一定时间后再创建连接  
    setTimeout(() => {  
      this.createConnection(deviceId)  
    }, 500)  
  },  
  fail: (err) => {  
    console.log('关闭连接失败', err)  
    // 即使关闭失败也尝试重新连接  
    this.createConnection(deviceId)  
  }  
})

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

2. 使用 5+ API 处理异常情况

如果 uni.closeBLEConnection 回调不触发(如知识库中提到的类似情况),可以尝试使用 plus.bluetooth.closeBLEConnectionhttps://www.html5plus.org/doc/zh_cn/bluetooth.html#plus.bluetooth.closebleconnection

3. 监听连接状态变化

根据知识库建议,请保证成对调用 createBLEConnectioncloseBLEConnection,并监听连接状态变化及时处理断开事件:

// 监听蓝牙连接状态变化  
uni.onBLEConnectionStateChange((res) => {  
  console.log('连接状态变化', res.connected, res.deviceId)  
  if (!res.connected) {  
    // 连接断开时,主动关闭连接释放资源  
    uni.closeBLEConnection({  
      deviceId: res.deviceId,  
      complete: () => {  
        console.log('已清理连接资源')  
      }  
    })  
  }  
})

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

4. 完整重连逻辑示例

const reconnectBLE = (deviceId) => {  
  // 先尝试关闭可能存在的残留连接  
  uni.closeBLEConnection({  
    deviceId: deviceId,  
    complete: () => {  
      // 无论成功失败,延迟后重新连接  
      setTimeout(() => {  
        uni.createBLEConnection({  
          deviceId: deviceId,  
          success: (res) => {  
            console.log('连接成功', res)  
          },  
          fail: (err) => {  
            if (err.errMsg && err.errMsg.includes('already connect')) {  
              // 如果仍然提示已连接,尝试重启蓝牙适配器  
              uni.closeBluetoothAdapter({  
                complete: () => {  
                  uni.openBluetoothAdapter({  
                    success: () => {  
                      // 重新初始化后再次连接  
                      setTimeout(() => {  
                        uni.createBLEConnection({ deviceId })  
                      }, 500)  
                    }  
                  })  
                }  
              })  
            }  
          }  
        })  
      }, 500)  
    }  
  })  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

注意事项(来自知识库):

  • 安卓如果多次调用 createBLEConnection 创建连接,有可能导致系统持有同一设备多个连接的实例,导致调用 closeBLEConnection 的时候并不能真正的断开与设备的连接 详情
  • 蓝牙连接随时可能断开,建议监听 uni.onBLEConnectionStateChange 回调事件,当蓝牙设备断开时按需执行重连操作

如果上述方法仍无法解决,可能是系统层蓝牙缓存问题,建议尝试关闭手机蓝牙后重新开启,或重启应用。

内容为 AI 生成,仅供参考

要回复问题请先登录注册