2015-03-02 127 views
2

我试图在BLE断开连接时在后台运行我的应用程序。但系统会在一段时间后终止应用程序。因此,我阅读了苹果的文档 - “Core蓝牙编程指南“。最后,我发现在下面一段话“蓝牙核心后台处理的iOS应用”。当BLE断开连接时,IOS后台在后台运行

“在后台执行长期行动

有些应用可能需要 使用核心蓝牙框架在 背景下执行长期操作。举个例子,假设你正在开发一款家用安全应用程序,用于与门锁通信的iOS设备(配备蓝牙低功耗技术)。应用程序和锁相互作用,当用户离开家时自动锁上门,并在用户返回时解锁门 - 当应用程序处于后台时。当用户离开家时,iOS设备可能最终超出锁的范围,导致与锁的连接丢失。此时,应用程序可以简单地调用CBCentralManager类的connectPeripheral:options:方法,并且因为连接请求不超时,所以iOS设备将在用户返回时重新连接。现在想象一下用户离家几天。如果应用程序在用户离开时被系统终止,则当用户返回家时应用程序将无法重新连接到锁,并且用户可能无法解锁门。对于这样的应用程序,它是能够继续使用蓝牙核心来执行长期行动,如监视活动和挂起的连接是至关重要的。”

从这段话我们知道,“监视活动和挂起的连接can solve the problem但我找不到任何方式在

蓝牙核心框架实现monitoring active and pending connections参考

我如何可以实现保持我的应用程序在后台运行时,BLE断开连接?

有没有人有任何想法?

回答

6

如果您在使用bluetooth-central Background Execution Mode注册您的应用程序,应用程序将被解雇了,如果它没有运行,并且将调用处理发现和连接,如centralManager:didDiscoverPeripheral,从中你可以调用它connectPeripheral:options:的委托方法。

确实,系统可能会在后台终止您的应用程序,但它会重新启动这些事件。

系统不会重新启动您的应用程序以进行后台BLE执行的唯一时间是用户强制在上次启动时杀死应用程序。系统会记住这一点,并且不会再次重新启动应用程序,直到用户第一次手动重新启动应用程序为止。

+0

只有在用户没有手动关闭应用程序(通过双击home按钮并将其刷出)时,系统才会重新启动应用程序。在这种情况下,系统将不会重新启动您的应用程序,从而使其有机会重新连接(因为系统假定用户不希望此应用程序在此情况下运行)。 – Despotovic 2016-04-15 11:34:09

+0

“确实,系统可能会在后台杀死你的应用,但它会重新启动这些事件。”这实际上是FALSE。我已经测试过这个案例。你能否提供这份声明的来源? – BangOperator 2017-02-23 18:44:39

+0

@BangOperator,你测试了哪部分,并且是假的?该系统可能会在后台杀死它?据苹果公司说:“被唤醒后,一个应用程序大约需要10秒钟才能完成任务。理想情况下,它应该尽快完成任务并允许自己再次被暂停。在系统中花费太多时间执行的应用程序可能会被系统阻止或终止。“和”...当调用任何CBCentralManagerDelegate或CBPeripheralDelegate委托方法时,系统会唤醒您的应用程序,从而允许您的应用程序处理重要中心角色事件...“ – 2017-02-23 21:15:10