UniAPP传统蓝牙
UniAPP 传统蓝牙开发指南
UniAPP 支持通过传统蓝牙(Classic Bluetooth)进行设备通信,适用于需要稳定连接、大数据传输的场景,如蓝牙打印机、蓝牙耳机等。以下为关键实现方法和注意事项:
初始化蓝牙模块
在 onLoad 或页面初始化时调用 uni.openBluetoothAdapter 初始化蓝牙模块。需检查设备是否支持蓝牙功能:
uni.openBluetoothAdapter({
success(res) {
console.log('蓝牙适配器初始化成功');
},
fail(err) {
console.error('初始化失败:', err);
}
});
搜索蓝牙设备
调用 uni.startBluetoothDevicesDiscovery 开始搜索周边设备,并通过 onBluetoothDeviceFound 监听发现的设备:
uni.startBluetoothDevicesDiscovery({
services: ['00001101-0000-1000-8000-00805F9B34FB'], // 常见串口服务UUID
success(res) {
uni.onBluetoothDeviceFound(device => {
console.log('发现设备:', device);
});
}
});
连接设备与通信
通过 uni.createBLEConnection 连接目标设备,获取服务并建立通信:
uni.createBLEConnection({
deviceId: '目标设备ID',
success() {
uni.getBLEDeviceServices({
deviceId: '目标设备ID',
success(services) {
const serviceId = services.services[0].uuid;
uni.getBLEDeviceCharacteristics({
deviceId: '目标设备ID',
serviceId,
success(chars) {
// 找到可写特征值
const characteristicId = chars.characteristics[0].uuid;
}
});
}
});
}
});
数据读写操作
写入数据使用 uni.writeBLECharacteristicValue,读取数据通过 onBLECharacteristicValueChange 监听:
// 写入数据
uni.writeBLECharacteristicValue({
deviceId: '设备ID',
serviceId: '服务UUID',
characteristicId: '特征值UUID',
value: ArrayBuffer.from('待发送数据'),
});
// 监听接收数据
uni.onBLECharacteristicValueChange(res => {
console.log('收到数据:', res.value);
});
断开连接与释放资源
通信完成后断开连接并停止蓝牙模块:
uni.closeBLEConnection({ deviceId: '设备ID' });
uni.closeBluetoothAdapter();
注意事项
- 兼容性:传统蓝牙在 iOS 上限制较多,建议优先使用 BLE(低功耗蓝牙)。
- 权限配置:在
manifest.json中声明蓝牙权限,Android 需动态申请定位权限。 - 设备过滤:通过
services参数过滤特定协议的设备,避免无效扫描。 - 错误处理:监听
onBluetoothAdapterStateChange处理蓝牙开关状态变化。
示例代码整合
完整流程示例可参考以下结构:
export default {
methods: {
initBluetooth() {
uni.openBluetoothAdapter({
success: this.startDiscovery,
fail: console.error
});
},
startDiscovery() {
uni.startBluetoothDevicesDiscovery({
services: ['00001101-0000-1000-8000-00805F9B34FB'],
success: () => {
uni.onBluetoothDeviceFound(this.handleDeviceFound);
}
});
},
handleDeviceFound(device) {
if (device.name.includes('目标设备名')) {
this.connectDevice(device.deviceId);
}
}
// 后续连接、通信方法...
}
}
通过上述步骤可实现传统蓝牙设备的搜索、连接及数据交互。实际开发中需根据设备协议调整服务UUID和特征值。






