我正在开发一个应用程序,该应用程序始终需要侦听BLE设备,将数据保存到核心数据中并将其发送到云API。 我用“应用程序使用CoreBluetooth进行通信”声明了该应用程序所需的后台模式,并且该应用程序确实运行并保存并发送了一段时间的数据。但是过了几分钟,该过程被操作系统终止了,我无法保存并发送数据。 每个样本都是32个字节,我们正在不断接收数据包
这是每次我们收到特性更新时都会调用的函数。
let byteArray = [UInt8](value)
if self.isFirstTime{
print("First Time BLE Incoming Called")
print(byteArray.count)
self.DataBuffer = self.DataBuffer + Array(byteArray[32...byteArray.count-1]) //Ignore the first 32 bytes
self.PickedDeviceId = Int(self.DataBuffer[DeviceIDByteIndex])
if self.PickedDeviceId != -1{
self.isFirstTime = false
}
print("Picked Device ID ", self.PickedDeviceId)
let myConcurrentQueue = DispatchQueue(label: "ConcurrentQueue",
qos: .background,
attributes: .concurrent,
autoreleaseFrequency: .workItem,
target: nil)
myConcurrentQueue.async {
var dataStructure:DataStructure!
while true{
self.serialQueue.sync {
if (self.DataBuffer.count>31){
print("Number of samples taken ", self.dataBuffer.count)
dataStructure = DataStructure.createFromByteArray(Array(self.DataBuffer[0..<32]))
self.DataBuffer.removeSubrange(0..<32)
if(dataStructure != nil && dataStructure.DeviceID == self.PickedDeviceId){
self.CHState = dataStructure.PelStatus
self.processDataStructure(dataStructure!)
self.cloudManager.addDSToSend(datastructure: dataStructure!)
if(self.isCalibrated()){
self.checkIfNotifyAlarm(dataStructure: dataStructure)
}
print("Number of samples processed ", self.dataBuffer.count)
}
else{///Sometimes we receive junk data so we need to filter it
print("Faulty data, recovering by Removing Bytes ")
if(self.DataBuffer.count > 24){
while(Int(self.DataBuffer[DeviceIDByteIndex]) != self.PickedDeviceId){
self.DataBuffer.removeFirst()
}
}
else{
self.DataBuffer.removeAll()
}
}
}
}
}
}
return
}
self.serialQueue.sync {
print("Entering Adding ",String(byteArray.count)," bytes")
self.DataBuffer = self.DataBuffer + byteArray
print("Number of bytes available ",self.DataBuffer.count)
}
print("Finished Adding bytes")
}'''