您可以在 CoreBluetooth 后台委托调用中做啥?

Posted

技术标签:

【中文标题】您可以在 CoreBluetooth 后台委托调用中做啥?【英文标题】:What can you do in CoreBluetooth background delegate calls?您可以在 CoreBluetooth 后台委托调用中做什么? 【发布时间】:2013-01-09 10:56:40 【问题描述】:

我在我的项目中使用 Core Bluetooth。我已经包含了 Session Backgrounding 以利用其后台模式功能。我观察到外围设备断开的代表,

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;

在后台模式下被调用。但是,除了 NSLogs 之外,我在此方法中编写的任何代码都不会执行。有人能准确解释一下这里可以执行什么样的代码吗?

我的目标是将此断开连接通知发送到我的服务器。

【问题讨论】:

【参考方案1】:

好吧,这似乎是我的问题。根据文档,当您的应用程序收到与蓝牙相关的委托调用时,它会被唤醒(在后台)大约 10 秒。

您可以利用这段时间来执行任何非视图更新任务,甚至可以使用beginBackgroundTaskWithExpirationHandler 请求额外的时间。

我的代码如下所示。

if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) 
    [self sendEmailInBackground:peripheral]; //Code to send a server request
    return;

及其在后台模式下工作。这在手机处于锁定状态时也有效。

【讨论】:

以上是关于您可以在 CoreBluetooth 后台委托调用中做啥?的主要内容,如果未能解决你的问题,请参考以下文章

CoreBluetooth - 在没有 LightBlue 的情况下不会调用后台模式下的 didDiscoverPeripheral

在后台使用 iBeacon 或 CoreBluetooth 识别 iOS 设备

CoreBluetooth 代表主队列/主线程?

iOS 11 CoreBluetooth:无法删除关键路径“委托”的观察者 CBPeripheral

而委托为 nil 或未实现外围设备:didDiscoverCharacteristicsForService:error: (Corebluetooth, Swift)

为啥 CoreBluetooth 一次又一次地发现相同的外设?