uni-app中onBLECharacteristicValueChange同样的代码小程序能监听到数据,安卓监听不到数据

uni-app中onBLECharacteristicValueChange同样的代码小程序能监听到数据,安卓监听不到数据
无内容可显示。

1 回复

更多关于uni-app中onBLECharacteristicValueChange同样的代码小程序能监听到数据,安卓监听不到数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中使用蓝牙 API 时,确实可能会遇到不同平台表现不一致的情况。对于你提到的 onBLECharacteristicValueChange 方法,小程序能够监听到数据而安卓监听不到数据的问题,可能是由于安卓设备或系统的蓝牙权限、蓝牙适配器的状态、或者特征值(Characteristic)的订阅状态等问题导致的。

以下是一个基本的 uni-app 蓝牙操作示例,包括初始化蓝牙适配器、扫描设备、连接设备、获取服务和特征值,并监听特征值变化。你可以检查这些步骤是否都正确执行,特别是在安卓设备上。

// 初始化蓝牙适配器
uni.openBluetoothAdapter({
  success: function (res) {
    console.log('蓝牙适配器初始化成功', res)
    // 开始扫描设备
    uni.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      success: function (res) {
        console.log('开始扫描设备', res)
      }
    }, function (err) {
      console.error('扫描设备失败', err)
    })

    // 监听找到新设备的事件
    uni.onBluetoothDeviceFound(function (devices) {
      devices.forEach(device => {
        // 根据设备信息选择目标设备,然后连接
        if (device.name === '目标设备名称') {
          uni.createBLEConnection({
            deviceId: device.deviceId,
            success: function (res) {
              console.log('设备连接成功', res)
              // 获取设备的服务
              uni.getBLEDeviceServices({
                deviceId: device.deviceId,
                success: function (services) {
                  services.forEach(service => {
                    if (service.uuid === '目标服务UUID') {
                      // 获取服务中的特征值
                      uni.getBLEDeviceCharacteristics({
                        deviceId: device.deviceId,
                        serviceId: service.uuid,
                        success: function (characteristics) {
                          characteristics.forEach(characteristic => {
                            if (characteristic.uuid === '目标特征值UUID') {
                              // 订阅特征值变化
                              uni.notifyBLECharacteristicValueChange({
                                state: true,
                                deviceId: device.deviceId,
                                serviceId: service.uuid,
                                characteristicId: characteristic.uuid,
                                success: function (res) {
                                  console.log('订阅成功', res)
                                }
                              })

                              // 监听特征值变化
                              uni.onBLECharacteristicValueChange(function (result) {
                                console.log('特征值变化', result)
                              })
                            }
                          })
                        }
                      })
                    }
                  })
                }
              })
            }
          })
        }
      })
    })
  }
})

请确保:

  1. 安卓设备已开启蓝牙权限。
  2. 设备名称、服务UUID和特征值UUID正确无误。
  3. 调用 uni.notifyBLECharacteristicValueChange 成功订阅了特征值变化。
  4. 尝试在不同的安卓设备和系统版本上测试,以排除特定设备或系统的问题。

如果以上步骤都正确无误,但问题依旧存在,可能需要进一步检查安卓设备的蓝牙日志,以获取更详细的错误信息。

回到顶部