2

在 Apple 的后台执行文档中,解释说“任何支持蓝牙数据后台处理的应用程序都必须是基于会话的。... 应用程序必须提供一个接口,允许用户启动和停止蓝牙事件的传递。然后,该界面应根据需要打开或关闭会话。

我们的 iOS 应用程序充当 CBPeripheralManager 与 OS X 上的 CBCentralManager 通信。我们在阻止应用程序暂停和对来自中央管理器的通信无响应时遇到问题。

我们在应用程序的 Info.plist 文件中使用 bluetooth-peripheral 值声明 UIBackgroundModes 键,这应该让 iOS 允许我们在后台操作并减少限制。在后台,我们的应用程序处理来自中央的通信并按预期回复数小时,但最终被暂停。

该文档暗示我们应该管理一个会话,也许以 NSURLSession 管理会话的方式,但没有 NSSession 或 CBSession 之类的东西,我在文档中找不到与 Core Bluetooth 相关的 Session 的其他提及。

有任何想法吗?

4

1 回答 1

1

我也在开发一个类似的应用程序,但我们的应用程序处于中央模式

如果您阅读本指南iOS 应用程序的核心蓝牙后台处理

特别是“国家保护与修复”部分

你会看到它说

Core Bluetooth 支持实现中心角色、外围角色或两者兼有的应用的状态保存和恢复。当你的应用实现了中心角色并添加了对状态保存和恢复的支持时,系统会在系统即将终止你的应用时保存你的中心管理器对象的状态以释放内存(如果你的应用有多个中心管理器,你可以选择您希望系统跟踪的那些)。特别是,对于给定的 CBCentralManager 对象,系统会跟踪:

实现外围角色的应用程序同样可以利用状态保存和恢复。对于 CBPeripheralManager 对象,系统会跟踪:

  1. 外设经理宣传的数据

  2. 外设管理器发布到设备数据库的服务和特性

  3. 订阅了您的特征值的中心

您还可以在下面的同一页面上阅读如何添加对状态保存和恢复的支持

希望这对你有帮助

于 2017-12-11T20:33:29.700 回答