iOS 7.1强制退出后,核心蓝牙(Core BLE)是否在后台运行?还是只有iBeacon在运行?

3
有人知道在iOS 7.1中,当用户强制退出应用程序后,核心BLE是否会继续在后台运行?还是只有iBeacon会继续运行?我知道两者都不会在强制退出时继续广播,但它们是否都会继续扫描? 编辑:我已经尝试测试当前的实现,但似乎在强制退出后并没有在后台运行。从其他来源听到的消息是它确实会在后台运行,但标准的CoreBluetooth实现对我来说似乎并没有在后台运行。

可能是How is iBeacon support REALLY changed in iOS 7.1?的重复问题。 - Daij-Djan
我知道iBeacon已经发生了变化 - 我想知道这个变化是否也影响了核心BLE。我的实现并没有使用iBeacon,只是使用了核心BLE。 - Taylor
2
这绝对不是重复的,而且是一个非常合理的问题。只是如果 SO 显示一些尝试的努力会更好。 - allprog
2个回答

3
对于CoreBluetooth(CBCentralManager和CBPeripheralManager),应遵循以下规则:
  • 如果用户使用应用切换器手动关闭应用程序,则您的应用程序中的BLE部分也会被关闭。
  • 如果用户没有手动关闭应用程序,则可以使用bluetooth-centralbluetooth-peripheral后台模式,在应用程序处于后台时获取相关回调。但是,iOS仍可能在内存压力或任何其他原因下关闭您的应用程序,在这种情况下,BLE部分也将消失。
  • 为了保持BLE部分活动状态,您可以在实例化CBCentralManager和CBPeripheralManager时使用恢复标识符。具有恢复标识符的管理器即使在iOS杀死您的应用程序后也会保持活动状态,如果发生有趣的BLE事件,则您的应用程序将启动到后台,并在应用程序被杀死以进行恢复时传递管理器的状态。
    • 主队列在后台执行期间被暂停-请确保以不在主队列上分派事件的方式配置管理器。
    • 如果用户使用应用切换器手动关闭应用程序,则放弃恢复并且您的应用程序的BLE部分将无法保持活动状态。
    • 要测试恢复,您需要解决使用BackgroundKill等工具的问题。请注意,Xcode调试器可能会使您的应用程序保持活动状态,请确保先断开调试器(这将杀死应用程序),然后启动您的应用程序,然后打开BackgroundKill并检查Xcode组织器窗口中的控制台输出。

那么,从本质上讲,7.1版本对于在后台运行的CoreBluetooth没有任何改变?只有iBeacon可以在用户通过切换器退出应用程序后继续工作? - Taylor
@etan:你说主队列在后台模式下被暂停了。请问你能详细说明一下你是怎么获取这个信息的吗?我正在从后台队列中分派到主队列,以避免应用程序前台时出现线程同步问题,即将核心数据访问从我的蓝牙队列中分派到主队列。在我的实验中,主循环确实在后台模式下运行的应用程序中运行。请你详细说明一下你的经验呢? - Lars Blumberg

0

我看到了这个答案,但它是否包括核心BLE?还是只有iBeacon?我知道iBeacon将继续扫描,但我的实现只使用核心BLE而不是iBeacon。 - Taylor
1
好的,为了明确起见,您想知道在iOS 7.1中,CoreBluetooth API是否会在应用程序被杀死后唤醒后台应用程序。我没有测试过这个问题。答案可能与您使用的CoreBluetooth API有关。您是否有可以分享具体信息的代码片段? - davidgyoung
是的,这就是我所询问的。我们使用CoreBluetooth API(外设和中央)来查找身边的其他用户。 - Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接