IOS CoreBluetooth: 当蓝牙断开连接时,运行在后台的应用程序

4
我正在尝试在BLE断开连接时使我的应用程序在后台运行。但是系统会在一段时间后杀死该应用程序。因此,我阅读了苹果的文档——《Core Bluetooth编程指南》。最后,我在“iOS应用程序的Core Bluetooth后台处理”中发现以下内容:

“在后台执行长期操作

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

从这段话中,我们知道“监视活动和挂起的连接可以解决问题”。但是我找不到任何实现“监视活动和挂起的连接”的方法。

Core Bluetooth框架参考

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

有人有任何想法吗?

1个回答

10
如果您使用蓝牙中央后台执行模式注册您的应用程序,则在应用程序未运行时,它将被启动,并调用其委托方法处理发现和连接,例如centralManager:didDiscoverPeripheral,从中您可以调用connectPeripheral:options:
虽然系统可能会在后台杀死您的应用程序,但它将重新启动以处理这些事件。

只有在上一次启动中用户强制杀死应用程序时,系统才不会重新启动您的应用程序以进行后台BLE执行。系统会记住这一点,并且在用户手动重新启动应用程序的第一次之前不会再次启动应用程序。


2
系统只会在用户没有手动关闭应用程序的情况下重新启动应用程序(通过双击主页按钮并将其滑出)。在这种情况下,系统将不会重新启动您的应用程序,给它重新连接的机会(因为系统认为用户不希望在这种情况下运行该应用程序)。 - Despotovic
“系统可能会在后台杀死您的应用程序,但它将为这些事件重新启动它”这个说法是错误的。我已经测试过了。您能提供此声明的来源吗? - BangOperator
1
@Despotovic,你的注释是否在苹果文档中有记录? - Rohit Pradhan
只有在尝试恢复连接时才需要“恢复”。发现事件不需要它。 - Marcus Adams
1
@RohitKP 在状态保存和恢复中指出,“当系统即将终止您的应用程序以释放内存时...”。因此,我无法找到关于这一说法的直接文档引用。目前,这是我在文档中能找到的最好的资料。但我可以告诉你,这个事实已经通过我的测试得到了证实... - Despotovic
显示剩余8条评论

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