面试遇到了是否会蓝牙通讯

48 阅读2分钟

一、关于蓝牙设备的搜索、连接、发送数据和接收数据

在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平台的配置中申请蓝牙权限。