连续聆听BLE设备,即使应用处于后台/挂起状态

时间:2019-12-09 14:44:14

标签: ios swift core-data bluetooth-lowenergy core-bluetooth

我正在开发一个应用程序,该应用程序始终需要侦听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")

    }'''

0 个答案:

没有答案
相关问题