// 开始读取设备信息
startReadDeviceInfo() {
// 先启用设备信息特征值的通知监听
wx.notifyBLECharacteristicValueChange({
deviceId: this.data.device.deviceId,
serviceId: this.data.serviceId,
characteristicId: this.data.readCharacteristicId,
state: true,
success: (res) => {
console.log('启用设备信息通知成功,开始触发分包数据');
// 延迟一下再触发分包数据
setTimeout(() => {
this.triggerDeviceInfoPackets();
}, 500);
},
fail: (err) => {
console.error('启用设备信息通知失败:', err);
wx.hideLoading();
wx.showToast({ title: '启用通知失败', icon: 'error' });
}
});
},
// 触发设备信息分包数据
triggerDeviceInfoPackets() {
console.log('触发设备信息分包数据...');
// 向触发特征值写入1来触发分包数据
const triggerData = new ArrayBuffer(1);
const uint8Array = new Uint8Array(triggerData);
uint8Array[0] = 0x01; // 写入1触发分包
wx.writeBLECharacteristicValue({
deviceId: this.data.device.deviceId,
serviceId: this.data.serviceId,
characteristicId: this.data.deviceInfoTriggerCharacteristicId,
value: triggerData,
success: (res) => {
console.log('触发设备信息分包成功,等待分包数据...');
this.setData({ deviceInfoPacketTimeoutId: packetTimeout });
},
fail: (err) => {
console.error('触发设备信息分包失败:', err);
wx.hideLoading();
wx.showToast({ title: '触发分包失败', icon: 'error' });
}
});
},
关键代码以及版本如上,先notify后再写入,控制台打印了”触发设备信息分包数据...“后再无反应,success跟fail的回调都没有触发,请问是什么原因?
其他信息:另一台安卓手机是正常的;数据超过20字节,原本是直接read,ios会出现read后直接卡住无回调的情况;查找资料后发现可能是数据过大的原因,改成现在的notify加write触发,每个包都是 20字节,还是有以上情况;BLE服务器是自定义的,可能是服务器端需要修改?

writeType指定为writeNoResponse试试
https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html#:~:text=%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%80%BC-,writeType,-string