2017-01-03 53 views
1

我知道使用iBeacon当应用程序关闭时,我可以听一些UUID。 我想倾听具体的价值特征当应用程序关闭。听取backgeound中的特定蓝牙特征值

所以,当应用程序是开放并连接到设备,我得到这个代表当一个新数据到达:

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { 

      if characteristic.uuid.uuidString == characteristicUUID { 

      if let str = NSString(data: characteristic.value!, encoding: String.Encoding.utf8.rawValue) 

有没有一种方法,当应用程序被关闭,以得到这个委托?所以我可以检查并看到我正在等待的正确字符串?

我知道我通常只有在连接到设备时才能听到此声音,但即使没有连接,我也想听。

iBeacon当应用程序关闭时,与任何BLE进行交互的唯一方法是? 其相当有限。

+0

您可以启用后台蓝牙中心模式,您的应用程序,你会继续当周表示改变接收到委托方法调用,但你需要保持与周边的连接。 – Paulw11

+0

@ Paulw11谢谢我启用了它们 - 但我询问了应用程序关闭时的情况,在这种情况下,您无法保持通信打开... – Curnelious

+0

这取决于您所说的“关闭”是什么意思;正常状态在后台暂停,并按照我所述的方式工作。如果应用程序已被系统终止(例如由于内存压力),那么您可以选择进入蓝牙状态恢复(请参阅Core Bluetooth编程指南),并且在看到外设或指示外设时,您的应用程序将重新启动到后台变化。如果您的应用已被用户刷屏终止,那么在用户重新启动之前,您的应用无法执行任何操作。 – Paulw11

回答

2

我回答我的问题也有该信息(也感谢保罗)

所以今天,为了能够从硬件获取信息时,应用程序是完全封闭的(由用户或系统),您只能使用iBeacons

但是iBeacons是相当有限的,你只能听一些UUID/MJ/MN和多数民众赞成它。

如果您想一直获取传感器数据,该怎么办?

方法Apple需要的是,您应该始终保持与设备的连接。因此,当您的应用程序处于后台时,只需在characteristic正在更新其值并且您仍处于连接状态时获得相同的delegates

如果你外出怎么办?

连接丢失,您要求再次搜索设备,当您回到家时您有连接并且您可以再次自动收听。

如果系统取消您的应用程序以释放内存会怎么样?

在这种情况下,你使用Preservation and Restoration,这将恢复CBCentral当应用程序再次检测硬件。要做到这一点:

centralManager=CBCentralManager(delegate: self, queue: nil, options: ["key":CBCentralManagerOptionRestoreIdentifierKey]) 

你在这里设置一个CBCentralManagerOptionRestoreIdentifierKey与你的“钥匙”。 iOS版时再次检测到信号,你得到这个委托:

func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) { 
    print(dict) 
} 

与对象的列表,你可以再次获取连接和数据。

底线: 的方法是 - 如果您需要的传感器数据不断,例如用于打开和关闭的锁,则保持连接所有的时间(而不是使用iBeacon显示)

另一底部。 line: 如果用户关闭了你的应用程序,就像Paul在这里所说的那样,你真的不能继续听,这在我看来是一种非常奇怪的方法。

https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html