5***@qq.com
5***@qq.com
  • 发布:2023-07-07 14:33
  • 更新:2023-07-10 12:46
  • 阅读:177

【报Bug】ios通过uni.writeBLECharacteristicValue方法同时向多个设备发送数据,只有最后一个设备会执行回调方法

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.8.4

手机系统: iOS

手机系统版本号: iOS 15

手机厂商: 苹果

手机机型: iphone11

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: HBuilderX

示例代码:
function send(devices: any) {  
    console.log('-----------开始给所有设备发送数据---------------');  
    for (let i = 0; i < devices.length; i++){  
        const device = devices[i];  
        console.log(`设备['${device.name}]['${device.deviceId}']开始发送数据:` + JSON.stringify(device.value));  
        TestWriteBLECharacteristic(device.deviceId, device.serviceId, device.characteristicId, device.value);  
    }  
}  

function TestWriteBLECharacteristic(deviceId: string, serviceId: string, characteristicId: string, value: number[]) {  
    const uint8Array = new Uint8Array(value.length);  
    for (let i = 0; i < value.length; i++) {  
        uint8Array[i] = value[i] & 0xFF;  
    }  
    console.log('[' + deviceId + ']:发送数据' + JSON.stringify(value));  
    uni.writeBLECharacteristicValue({  
        deviceId: deviceId,  
        serviceId: serviceId,  
        characteristicId: characteristicId,  
        value: uint8Array.buffer,  
        success:(e) => {  
            console.log('数据发送成功[' + deviceId + ']');    
        },  
        fail: (e) => {  
            console.log('数据发送失败[' + deviceId + ']');  
        },  
        complete() {  
            console.log('数据发送完成[' + deviceId + ']');  
        }  
    });  
}  

操作步骤:

1、通过for循环所有设备列表;
2、在循环中使用uni.writeBLECharacteristicValue方法为每个设备发送数据;
3、获取每个设备发送数据的结果;
4、对应的设备根据发送的设备指令数据,执行相应的操作;

预期结果:

1、每个设备都能执行uni.writeBLECharacteristicValue方法的回调;
2、每个设备都能根据指令,执行相应的操作;

实际结果:

1、只有最后一个设备执行uni.writeBLECharacteristicValue方法的回调;
2、大部分情况下所有设备都能准确无误的执行指令,但是偶尔有一部分设备未能执行相应的指令;

bug描述:

在同时成功连接多个BLE设备后,并且在使用uni.writeBLECharacteristicValue方法控制单个设备的情况下都是正常的,能正常执行回调函数,同时设备能准确执行指令。但是同时控制多个设备时,每次只有最后一个设备会执行回调函数,同时若连续发送指令,间隔时间在1秒内的话,偶尔会存在部分设备未执行指令,不清楚是数据未发送,还是数据发送失败。

2023-07-07 14:33 负责人:DCloud_iOS_WZT 分享
已邀请:
5***@qq.com

5***@qq.com (作者)

请问有人回答吗

  • DCloud_iOS_WZT

    你这个BluetoothPlugin哪里来的

    2023-07-10 12:50

  • 5***@qq.com (作者)

    回复 DCloud_iOS_WZT: 就是uni,为了同时试一下plus.bluetooth而使用一个变量,方便切换。

    2023-07-13 11:12

DCloud_iOS_WZT

DCloud_iOS_WZT

提供一个可复现的示例工程吧

该问题目前已经被锁定, 无法添加新回复