uniapp 如何监控蓝牙连接状态
在uniapp中如何实时监控蓝牙设备的连接状态?我尝试使用uni.onBLEConnectionStateChange方法,但有时无法正确触发回调。请问有没有完整的示例代码或可靠的监听方案?另外,在安卓和iOS平台上是否存在差异需要注意?
2 回复
在uniapp中,使用uni.onBLEConnectionStateChange监听蓝牙连接状态变化。示例:
uni.onBLEConnectionStateChange(res => {
console.log(`设备 ${res.deviceId} 状态: ${res.connected ? '已连接' : '断开连接'}`);
});
需先调用uni.createBLEConnection连接设备。
在 UniApp 中,可以通过 uni.onBluetoothDeviceFound、uni.onBLEConnectionStateChange 等 API 监控蓝牙连接状态。以下是具体实现方法:
1. 初始化蓝牙模块
首先确保蓝牙模块已初始化:
uni.openBluetoothAdapter({
success: (res) => {
console.log('蓝牙模块初始化成功');
this.startBluetoothDiscovery();
},
fail: (err) => {
console.error('蓝牙初始化失败:', err);
}
});
2. 监听蓝牙设备发现
uni.onBluetoothDeviceFound((devices) => {
console.log('发现设备:', devices.devices);
// 这里可以筛选目标设备
});
3. 连接指定设备
uni.createBLEConnection({
deviceId: '目标设备ID',
success: (res) => {
console.log('蓝牙连接成功');
this.listenBLEState();
}
});
4. 监听连接状态变化
listenBLEState() {
uni.onBLEConnectionStateChange((res) => {
console.log(`设备 ${res.deviceId} 状态变化:`, res.connected);
if (!res.connected) {
uni.showToast({ title: '蓝牙已断开', icon: 'none' });
// 执行重连或其他处理
}
});
}
5. 完整示例
export default {
data() {
return {
deviceId: ''
}
},
methods: {
initBluetooth() {
uni.openBluetoothAdapter({
success: () => {
this.startDiscovery();
}
});
},
startDiscovery() {
uni.startBluetoothDevicesDiscovery({
success: () => {
uni.onBluetoothDeviceFound((res) => {
const device = res.devices[0];
if (device.deviceId) {
this.deviceId = device.deviceId;
this.connectDevice();
}
});
}
});
},
connectDevice() {
uni.createBLEConnection({
deviceId: this.deviceId,
success: () => {
this.listenBLEState();
}
});
},
listenBLEState() {
uni.onBLEConnectionStateChange((res) => {
if (res.deviceId === this.deviceId) {
console.log('连接状态:', res.connected ? '已连接' : '已断开');
}
});
}
},
onLoad() {
this.initBluetooth();
}
}
注意事项:
- 需要在 manifest.json 中配置蓝牙权限
- 真机调试时需要开启手机蓝牙
- 使用后及时调用
uni.closeBluetoothAdapter释放资源 - 注意设备兼容性,不同设备可能有差异
通过以上方法即可实时监控蓝牙连接状态,在连接断开时能及时收到回调通知。

