核心蓝牙和backgrounding:设备的检测和触发动作,甚至在后台模式是天后?(Core Blu

2019-07-20 12:00发布

我写的时候需要一定的蓝牙低功耗设备来到范围内得到信息的应用程序。 如果BLE装置得到注意我的应用程序只存储一个时间戳。

正如在WWDC 2012核心蓝牙视频表示,有两种可能的应用与蓝牙核心工作时,作用在后台模式:

事件Backgrounding

事件backgrounding也许正是与蓝牙低功耗设备交互时,大多数应用程序将使用。 此模式不允许直接通信的附件时,应用程序在后台运行,但是当它要与应用程序进行通信并提供来自附件的通知。 iOS版将保持连接到BTLE配件当你的应用程序是在后台将继续监控通知。 当连接BTLE附件有一个可用的通知,的iOS将通知附件想谈谈您的应用程序,允许用户加载应用程序,并与附件交互的用户。 由于许多设备需要省电,只有在确定的时间提供信息,将大大提高配件和iPhone 4S的电池寿命。

  • 没有info.plist中的条目都需要这种模式。

会议Backgrounding

有次,其中一个应用程序必须即使它在后台运行的附件进行交互。 考虑一个运行应用程序,需要监视心脏速率的实时性。 有一个明确的开始和停止这种模式。 用户开始他们在App运行。 当运行被激活时,应用程序,直到运行完毕或停止心脏读取率信息。 会议backgrounding还允许扫描和连接到BTLE配件,而应用程序是在后台。 一个scanForPeripheralsWithServices或connectPeripheral呼叫将继续,即使该应用程序是在后台。 CoreBluetooth将继续监控发现或连接时,匹配您的应用寻找服务,并打电话给你的应用程序委托特定的外设或外设。 要留意,每次有BTLE外围或iPhone 4S使用的无线电,它消耗的各个设备可用功率。 使用基于会话backgrounding应用程序开发人员必须记住用电量。

  • 会议backgrounding需要backgrounding模式进入到UIBackgroundModes,蓝牙中央,在您的应用程序的info.plist。

到现在为止我会话Backgrounding(与根据info.plist中的条目)。 该应用程序会询问的iOS检索所有已知的设备,然后给connect命令我正在寻找的设备。 我的应用程序在背景执行后,即使分钟后,连接回调来。

但是: - 假设 - 一小时应用进行了后悬挂。 这意味着,我的应用程序获取用户推出的下一次,它不能告诉,如果已经有感兴趣的BLE装置的任何踪迹。

所以我的问题是:是否有可能在我的应用程序,而无需用户交互甚至几天的时候一定BLE装置进来范围,所以我可以存储我的时间戳被发送到后台后得到通知?

Answer 1:

不,的iOS不保证您的应用程序在后台一直活着。 该文件说:

然而,这种方法可以在其中应用程序在后台运行的情况下被调用(不悬浮),并且系统需要终止它由于某种原因。

(的文档applicationWillTerminate )



Answer 2:

由于iOS的7,你的使用情况现在很容易支持。 适用于iOS 7之前,你的应用程序可以注册有关外围通知,它会在后台被唤醒时,系统必须通知交付。 但是,如果系统内存压力下前来,而你的应用程序是背景执行,或重新启动了,它不会被重新启动。 iOS的7加状态恢复到CBCentralManagerCBPeripheralManager ,所以现在的操作系统将重新启动你的能力是有限的,即使它没有运行的应用程序对任何一方的上述条件。 见CoreBluetooth导向以获得更多信息。

总之,对于你的使用情况,您可以做到以下几点:

  • 继续支持bluetooth-central作为后台执行模式。
  • 选择启用状态保存和恢复,如记录在这里下的“添加支持国家保护修缮”。


Answer 3:

使用IOS7 BLE状态保存和复原

如果你的程序是由IOS,由于内存的压力终止 (这就是为什么你的应用程序不能天后工作),它不能再处理蓝牙代表。 在这种情况下,如果你使用的状态保存和恢复,你的应用程序可以重新启动背景再次运行,也只有10秒。 10秒后,它会移动到暂停状态。 只有在这种情况下,CBCentralManager的willRestoreState可以被触发。

祝好运。



文章来源: Core Bluetooth and backgrounding: Detection of a device and triggering an action, even after being days in background mode?