Objective-c长时间运行的蓝牙后台服务,当应用程序后台

问题描述:

我似乎无法找到正确的文档,教程或SO帖子指向我目前正确的实施......即使有许多帖子关于这个话题浮出水面。Objective-c长时间运行的蓝牙后台服务,当应用程序后台

问题

我有(对)连接到I内置BT设备的应用程序。我想要的是,当用户按下主页按钮或背景时,我想通过BT服务层将定期更新的应用程序发送到BT设备。我现在正在这样做(只触发一次)在applicationWillResignActiveapplicationDidEnterBackground方法中,并且它完美地工作。问题是,我只能看到它后才能执行此操作。任何循环,定时器,后台类型的服务,我在这些方法中启动,很快就会死亡。

我需要什么

是应用程序继续寻找在后台我的BT装置每10秒左右更新发送到设备。我首先需要检查以确保应用程序仍然是背景,但一旦我知道它在后台我想发送更新。当应用程序重新回到焦点时,我可以停止对BT设备的更新,但是当应用程序不专注时,它发送它们至关重要。

研究

我发现这些所谓的帖子(long-running tasksbackground task execution handlerusing this in an NSTimer loop ...但它死了),但他们还没有和实施帮助的。

+0

你检查了这个:https://stackoverflow.com/questions/40761722/core-bluetooth-performing-long-term-actions-in-the-background?rq=1。你也不能在后台使用NSTimer,因为它在主线程上工作。 – ninjaproger

+0

@ninjaproger如何获得间隔计时器或某种受控循环在后台运行并将更新发送到我的蓝牙设备? – GoreDefex

当我写这篇文章的时候,我对OBJ-C来说太新了,并且不太了解代理方法的正确访问级别在后台触发的概念(即蓝牙中央的info.plist访问) 。

一个月后的最终结果是构建一个外设,它可以通过预订的特性更新以定时循环唤醒应用程序。一旦应用程序醒来,您将有10秒钟的时间来处理刚刚发生的事件,并且因为我只保存设备发布的数据副本,一切正常。