我知道使用iBeacon可以在应用程序关闭时听一些UUID
关闭应用程序时,我想听听特性的具体值。

因此,当应用程序打开并连接到设备时,当有新数据到达时,我得到了这个委托:

  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 进行交互的唯一方法吗?
它相当有限。

最佳答案

我正在回答我的问题,以获取此信息。(也感谢Paul)

因此,今天为了在应用程序完全关闭(由用户或系统关闭)时能够从硬件获取信息,您只能使用iBeacons

但是iBeacon的功能非常有限,您只能听一些UUID/MJ/MN,仅此而已。

如果您想一直获取传感器数据怎么办?
Apple采取的方法是,您应始终保持与设备的连接。因此,当您的应用程序在后台运行时,当delegates的值被更新且仍保持连接状态时,您只需获得相同的characteristic

如果您外出怎么办?

连接断开,您要求再次搜索设备,当您回到家中时,您已经建立了连接,并且可以再次自动收听。

如果系统取消您的应用以释放内存怎么办?

在这种情况下,您使用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)。

的另一句话:
如Paul在这里所说,如果用户关闭您的应用程序,您将无法真正继续收听,这在我看来是一种非常奇怪的方法。

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

07-24 09:33