一、关于蓝牙设备的搜索、连接、发送数据和接收数据
在uni中可以使用uni的API进行蓝牙设备的搜索、连接、发送数据和接收数据。
使用uni.startBluetoothDevicesDiscovery进行蓝牙设备的搜索
uni.startBluetoothDevicesDiscovery({
success: (res) => {
uni.onBluetoothDeviceFound((devices) => {
this.devices = this.devices.concat(devices);
});
},
fail: (err) => {
console.log('搜索蓝牙设备失败', err);
}
});
停止搜索设备
uni.stopBluetoothDevicesDiscovery();
连接设备
uni.createBLEConnection({
deviceId,
success: (res) => {
this.connectedDeviceId = deviceId;
console.log('连接蓝牙设备成功', res);
},
fail: (err) => {
console.log('连接蓝牙设备失败', err);
}
});
数据发送
uni.writeBLECharacteristicValue({
deviceId: this.connectedDeviceId,
serviceId,
characteristicId,
value: Buffer.from(value),
success: (res) => {
console.log('发送数据成功', res);
},
fail: (err) => {
console.log('发送数据失败', err);
}
});
监听蓝牙设备的特征值变化
uni.notifyBLECharacteristicValueChange({
state: true, // 是否启用notify
deviceId: this.connectedDeviceId,
serviceId,
characteristicId,
success: (res) => {
console.log('监听特征值变化成功', res);
uni.onBLECharacteristicValueChange((characteristic) => {
console.log('收到数据', characteristic);
});
},
fail: (err) => {
console.log('监听特征值变化失败', err);
}
});
断开设备
uni.closeBLEConnection({
deviceId: this.connectedDeviceId,
success: (res) => {
console.log('断开蓝牙连接成功', res);
},
fail: (err) => {
console.log('断开蓝牙连接失败', err);
}
});
完整案例
export default {
data() {
return {
devices: [], // 存储搜索到的蓝牙设备
connectedDeviceId: '', // 已连接的蓝牙设备ID
};
},
methods: {
// 开始搜索蓝牙设备
startBluetoothDevicesDiscovery() {
uni.startBluetoothDevicesDiscovery({
success: (res) => {
uni.onBluetoothDeviceFound((devices) => {
this.devices = this.devices.concat(devices);
});
},
fail: (err) => {
console.log('搜索蓝牙设备失败', err);
}
});
},
// 停止搜索蓝牙设备
stopBluetoothDevicesDiscovery() {
uni.stopBluetoothDevicesDiscovery();
},
// 连接蓝牙设备
connectBluetoothDevice(deviceId) {
uni.createBLEConnection({
deviceId,
success: (res) => {
this.connectedDeviceId = deviceId;
console.log('连接蓝牙设备成功', res);
},
fail: (err) => {
console.log('连接蓝牙设备失败', err);
}
});
},
// 发送数据
sendData(serviceId, characteristicId, value) {
uni.writeBLECharacteristicValue({
deviceId: this.connectedDeviceId,
serviceId,
characteristicId,
value: Buffer.from(value),
success: (res) => {
console.log('发送数据成功', res);
},
fail: (err) => {
console.log('发送数据失败', err);
}
});
},
// 监听蓝牙设备的特征值变化
notifyBLECharacteristicValueChange(serviceId, characteristicId) {
uni.notifyBLECharacteristicValueChange({
state: true, // 是否启用notify
deviceId: this.connectedDeviceId,
serviceId,
characteristicId,
success: (res) => {
console.log('监听特征值变化成功', res);
uni.onBLECharacteristicValueChange((characteristic) => {
console.log('收到数据', characteristic);
});
},
fail: (err) => {
console.log('监听特征值变化失败', err);
}
});
},
// 断开蓝牙连接
closeBLEConnection() {
uni.closeBLEConnection({
deviceId: this.connectedDeviceId,
success: (res) => {
console.log('断开蓝牙连接成功', res);
},
fail: (err) => {
console.log('断开蓝牙连接失败', err);
}
});
}
}
};
看完之后,估计你大概有所了解了。
注意:在真机上测试蓝牙功能,你需要在manifest.json中配置蓝牙权限,并且可能需要在App平台的配置中申请蓝牙权限。