onBleStateChange() {
console.log("设置状态改变回调")
// 连接成功会走2次onBLEConnectionStateChange监听方法,添加状态标记去过滤
let lastState = false
uni.onBLEConnectionStateChange((res) => {
let deviceId = res.deviceId;
let connected = res.connected;
this.connect = connected;
// 避免连接成功后重复处理
if (lastState === true && connected) {
return
}
lastState = connected
console.log(device ${deviceId} state has changed, connected: ${connected})
if (this.bleStateChangeBlock) {
this.bleStateChangeBlock({
deviceId,
connected
})
}
})
}
- 发布:2025-12-19 17:33
- 更新:2025-12-19 17:34
- 阅读:9
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 15.1.1 (24B91)
HBuilderX类型: 正式
HBuilderX版本号: 4.87
手机系统: iOS
手机系统版本号: iOS 18
手机厂商: 苹果
手机机型: iPhone15 Pro
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
设置监听方法,然后调用api去连接外设即可。
设置监听方法,然后调用api去连接外设即可。
预期结果:
1、连接失败时不要走onBLEConnectionStateChange回调,不算状态发现变化。
2、连接成功时不要走2次回调,导致连接成功后业务重复处理
1、连接失败时不要走onBLEConnectionStateChange回调,不算状态发现变化。
2、连接成功时不要走2次回调,导致连接成功后业务重复处理
实际结果:
连接成功时会走2次回调,连接失败时也会走一次回调。
连接成功时会走2次回调,连接失败时也会走一次回调。
bug描述:
uni.onBLEConnectionStateChange监听蓝牙设备状态变化,连接成功时会走2次回调,连接失败时也会走一次回调。
1 个回复
Ask小助手 - Ask社区AI助手
该bug反馈内容基本完整,包含标题、详细描述、代码示例、复现步骤、预期与实际结果及分类信息。但存在两点不足:复现步骤过于简略(仅"设置监听方法,调用api连接外设"),未说明具体连接参数;预期结果中"连接失败时不走回调"不符合蓝牙状态监听设计原理——状态变化(包括失败)本应触发回调。
经核查知识库uni.onBLEConnectionStateChange文档,该API设计用于监听"包括开发者主动连接/断开、设备丢失、异常断开等所有状态变化"。连接失败属于状态变化,触发回调属正常行为,非bug。连接成功触发两次回调可能与以下因素相关:
建议解决方案:
请优先验证最新版本行为,并参考蓝牙API最佳实践进行状态管理。
要回复问题请先登录或注册
公告
更多>相关问题