Objective-c long-运行 蓝牙后台服务,当应用后台运行时

Objective-c long-running background service for bluetooth, when app backgrounded

到目前为止,我似乎找不到合适的文档、教程或 SO post 来指导我进行正确的实施...尽管有很多 post 关于这个主题漂浮着。

问题

我有一个应用程序可以连接(配对)到我构建的 BT 设备。我想要的是,当用户按下主页按钮或背景应用程序时,我想定期通过 BT 服务层向 BT 设备发送更新。我现在正在 applicationWillResignActiveapplicationDidEnterBackground 方法中执行此操作(仅触发一次)并且效果很好。问题是我只能执行一次。我在这些方法中启动的任何循环、计时器、后台类型服务很快就会消失。

我需要的

用于应用程序在后台持续查找我的 BT 设备,每 10 秒左右向设备发送更新。我首先需要检查以确保该应用程序仍在后台运行,但是一旦我知道它在后台运行,我就想发送更新。当应用程序重新聚焦时,我可以停止对 BT 设备的更新,但重要的是它会在应用程序不聚焦时发送它们。

研究

我找到了这些 SO posts(long-running tasks, background task execution handler, using this in an NSTimer loop...但它死了)但它们对实现根本没有帮助。

当我写这个 post 时,我对 OBJ-C 还太陌生,不太理解具有适当访问级别的委托方法的概念以在后台触发(即 info.plist 在 bluetooth-central 下访问)。

一个月后的最终结果是构建了一个外围设备,可以通过订阅的特征更新在定时循环中唤醒应用程序。应用程序唤醒后,您有 10 秒的时间来处理刚刚发生的事件,因为我只保存了设备 post 编辑的数据副本,所以一切都很好。