UniApp 蓝牙功能基于微信小程序蓝牙 API 封装,使用前需在 manifest.json 中开启蓝牙权限。以下是核心步骤和示例代码:
1. 初始化蓝牙
// 检查蓝牙适配器状态
uni.openBluetoothAdapter({
  success: (res) => {
    console.log('蓝牙初始化成功');
    this.startDiscovery();
  },
  fail: (err) => {
    console.error('初始化失败:', err);
  }
});
2. 搜索设备
startDiscovery() {
  uni.startBluetoothDevicesDiscovery({
    services: ['需要过滤的UUID'], // 可选
    success: (res) => {
      uni.onBluetoothDeviceFound(this.onDeviceFound);
    }
  });
}
onDeviceFound(devices) {
  console.log('发现设备:', devices.devices);
  // 设备列表可渲染到页面
}
3. 连接设备
uni.createBLEConnection({
  deviceId: '目标设备ID',
  success: (res) => {
    console.log('连接成功');
    this.getServices();
  }
});
4. 获取服务与特征值
getServices() {
  uni.getBLEDeviceServices({
    deviceId: '设备ID',
    success: (res) => {
      res.services.forEach(service => {
        this.getCharacteristics(service.uuid);
      });
    }
  });
}
getCharacteristics(serviceId) {
  uni.getBLEDeviceCharacteristics({
    deviceId: '设备ID',
    serviceId: serviceId,
    success: (res) => {
      res.characteristics.forEach(char => {
        if (char.properties.read) {
          this.readData(serviceId, char.uuid);
        }
        if (char.properties.notify) {
          this.notify(serviceId, char.uuid);
        }
      });
    }
  });
}
5. 数据交互
// 启用通知
notify(serviceId, characteristicId) {
  uni.notifyBLECharacteristicValueChange({
    deviceId: '设备ID',
    serviceId,
    characteristicId,
    state: true,
    success: (res) => {
      uni.onBLECharacteristicValueChange(this.onDataReceived);
    }
  });
}
// 监听数据
onDataReceived(res) {
  const data = Array.from(new Uint8Array(res.value))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
  console.log('收到数据:', data);
}
// 发送数据
writeData(serviceId, characteristicId, data) {
  const buffer = new ArrayBuffer(data.length);
  const dataView = new Uint8Array(buffer);
  for (let i = 0; i < data.length; i++) {
    dataView[i] = data.charCodeAt(i);
  }
  
  uni.writeBLECharacteristicValue({
    deviceId: '设备ID',
    serviceId,
    characteristicId,
    value: buffer,
  });
}
注意事项:
- 真机调试需使用原生App基座
- Android 6.0+ 需要定位权限
- 设备ID需通过搜索后获取
- 及时在页面卸载时关闭连接:
uni.closeBLEConnection({ deviceId: '设备ID' });
建议查阅 UniApp 官方文档获取最新 API 说明,不同平台可能存在细微差异。