聆听backgeound中特定的蓝牙特征值

时间:2017-01-03 12:12:23

标签: ios iphone bluetooth core-bluetooth

我知道使用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 互动的唯一方式吗? 它非常有限。

1 个答案:

答案 0 :(得分:2)

我正在回答我的问题,也有这些信息。(还要感谢保罗)

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

但是iBeacons非常有限,你只能听一些UUID/MJ/MN就可以了。

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

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

如果外出怎么办?

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

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

在这种情况下,您使用Preservation and Restoration,当应用再次检测到硬件时,CBCentral会恢复centralManager=CBCentralManager(delegate: self, queue: nil, options: ["key":CBCentralManagerOptionRestoreIdentifierKey]) 。为此:

CBCentralManagerOptionRestoreIdentifierKey

您在此处使用"键"设置func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) { print(dict) } 。 当iOS再次检测到信号时,您将获得此委托:

<table>

包含您的对象列表,您可以再次获取连接和数据。

底线: 方法是 - 如果您不断需要传感器数据,例如打开和关闭锁,您始终保持连接状态。(而不是使用iBeacon)

另一个底线: 如果用户关闭你的应用程序,正如保罗所说,你不能真正继续并倾听,这在我看来是一种非常奇怪的方法。

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