uni-app ios蓝牙发送数据配置writeType=writeNoResponse无效

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app ios蓝牙发送数据配置writeType=writeNoResponse无效

项目信息 详情
产品分类 uniapp/App
PC开发环境 Mac
PC操作系统版本 14.1.2 (23B92)
HBuilderX类型 正式
HBuilderX版本 3.98
手机系统 iOS
手机系统版本 iOS 17
手机厂商 苹果
手机机型 iphone13
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

async writeCharacteristic(deviceId, serviceUuid, characteristicUuid, data) {
    console.log('writeCharacteristic ---->> 开始发送数据...')
    return new Promise((resolve, reject) => {
        uni.writeBLECharacteristicValue({
            deviceId: deviceId,
            serviceId: serviceUuid,
            characteristicId: characteristicUuid,
            value: data,
            writeType: 'writeNoResponse',
            success: (res) => {
                console.log(deviceId + "数据发送成功~")
                resolve(res);
            },
            fail: (error) => {
                console.log(deviceId + "数据发送失败~:" + data, error)
                reject(error);
            }
        });
    });
}

操作步骤:

必现,所有苹果手机都一样的

预期结果:

秒级发送

实际结果:

3-4秒才发送成功

bug描述:

如附件所示:
ios端配置了writeType: 'writeNoResponse’没有生效每发送一次蓝牙指令时间在3-4秒。


1 回复

在使用 uni-app 开发 iOS 应用时,如果你在蓝牙通信中设置了 writeTypewriteNoResponse,但发现该配置无效,可能是因为 iOS 系统对蓝牙通信的处理方式与 Android 不同。以下是一些可能的原因和解决方案:

1. iOS 系统的限制

iOS 系统对蓝牙通信的处理方式与 Android 有所不同。在 iOS 中,writeNoResponse 并不总是被支持,尤其是在某些蓝牙设备或服务中。iOS 系统可能会自动将 writeNoResponse 转换为 writeWithResponse,以确保数据的可靠传输。

2. 检查蓝牙设备的特性

确保你正在写入的蓝牙特性(Characteristic)支持 writeNoResponse。你可以通过检查特性的 properties 属性来确认。如果特性不支持 writeNoResponse,那么即使你在代码中设置了 writeType,iOS 系统也会忽略该设置。

3. 使用 writeWithResponse

如果 writeNoResponse 无效,你可以尝试使用 writeWithResponse。虽然这可能会增加一些延迟,但它可以确保数据被成功写入到蓝牙设备。

uni.writeBLECharacteristicValue({
  deviceId: deviceId,
  serviceId: serviceId,
  characteristicId: characteristicId,
  value: value,
  writeType: 'writeWithResponse', // 使用 writeWithResponse
  success: (res) => {
    console.log('写入成功', res);
  },
  fail: (err) => {
    console.log('写入失败', err);
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!