我知道使用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