我们使用corebluetooth
框架从BLE设备获取数据。我们扫描BLE设备并建立连接。我们获得BLE设备的服务并获得特定服务的特征。
在设置指示值读取描述符的描述符值之后,使用setNotifyValue方法设置特征的指示值。
我们以didUpdateValueFor()
方法成功地从蓝牙获取了数据。但是我们从中丢失了一些数据。
我们的蓝牙一次发送244字节,但在iOS中,一次只能发送182字节。因此从中下载数据时会丢失一些价值。
我们在上面的代码中使用了下面的代码。请给我们一个解决方案。如何从蓝牙设备或iOS corebluetooth框架中获取完整数据以提供任何特定数量的字节?
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?){
for Characteristics in service.characteristics!{
if aCharacteristics.uuid.isEqual(CBUUID(string: “XXXXX-XXXXX-XX-XXXX”)) {
peripheral.setNotifyValue(true, for: aCharacteristics)
}
}
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverDescriptorsFor characteristic: CBCharacteristic, error: Error?) {
for disc in characteristic.descriptors!{
if disc.uuid.isEqual(CBUUID(string: “XXXXX-XXX-XXXXXX”)){
peripheral.readValue(for: disc)
}
}
}
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?){
let nsdataStr = NSData.init(data: characteristic.value!)
}