Iphone 核心蓝牙和背景接地:即使在后台模式下工作了几天,也能检测到设备并触发动作?

Iphone 核心蓝牙和背景接地:即使在后台模式下工作了几天,也能检测到设备并触发动作?,iphone,ios,core-bluetooth,bluetooth-lowenergy,Iphone,Ios,Core Bluetooth,Bluetooth Lowenergy,我已经编写了一个应用程序,当某个蓝牙低能设备进入范围时需要得到通知。如果BLE设备被发现,我的应用程序只存储一个时间戳 正如WWDC 2012 Core Bluetooth视频中所述,在使用Core Bluetooth时,应用程序有两种可能在后台模式下运行: 事件背景 事件背景可能是大多数应用程序所关注的 将在与蓝牙低能耗设备交互时使用。这 模式不允许在以下情况下与附件直接通信: 该应用程序位于后台,但提供了来自的通知 当附件想要与应用程序通信时,请将其删除。iOS将 当您的应用程序处于可用状态

我已经编写了一个应用程序,当某个蓝牙低能设备进入范围时需要得到通知。如果BLE设备被发现,我的应用程序只存储一个时间戳

正如WWDC 2012 Core Bluetooth视频中所述,在使用Core Bluetooth时,应用程序有两种可能在后台模式下运行:

事件背景

事件背景可能是大多数应用程序所关注的 将在与蓝牙低能耗设备交互时使用。这 模式不允许在以下情况下与附件直接通信: 该应用程序位于后台,但提供了来自的通知 当附件想要与应用程序通信时,请将其删除。iOS将 当您的应用程序处于可用状态时,请保持与BTLE附件的连接 后台,并将继续监视通知。当 已连接的BTLE附件有可用的通知,iOS将通知 附件希望与您的应用程序通话的用户,允许 用户可以加载您的应用程序并与附件交互。一样多 设备需要省电,只需在最短的时间内提供信息 确定的时间将大大提高电池的寿命 配件和iPhone4S

  • 此模式不需要info.plist条目
会话背景

有时应用程序必须与用户交互 即使是在后台运行的附件。考虑一下 需要实时监测心率的跑步应用程序。有一个 清除此模型的启动和停止。用户在中开始运行 应用程序。当跑步处于活动状态时,应用程序会读取心率信息 直到运行完成或停止。会议背景也是如此 允许在应用程序运行时扫描和连接BTLE附件 在背景中。对外围设备的扫描,包括服务或 connectPeripheral呼叫将继续,即使应用程序处于 背景。CoreBluetooth将继续监视特定的 外围设备或与应用程序正在查看的服务匹配的外围设备 在找到或连接时,为您的应用和呼叫代理。注意, 每次BTLE外设或iPhone4S使用其收音机时,它都是 耗尽各设备的可用功率。应用程序开发人员 使用基于会话的背景必须注意电源使用

  • 会话背景需要在Apps info.plist中的UIBackgroundModes、bluetooth central中输入背景模式
到目前为止,我一直在进行会话背景设置(使用相应的info.plist条目)。该应用程序要求iOS检索所有已知设备,然后向我正在查找的设备发出connect命令。即使在我的应用程序被备份几分钟后,连接回调也会出现

但是:该应用程序在一小时后被暂停。这意味着下次用户启动我的应用程序时,它无法判断是否有人看到感兴趣的BLE设备


因此,我的问题是:当某个可移动设备进入范围时,我的应用程序是否可能在发送到后台几天后,在没有用户交互的情况下收到通知,以便我可以存储我的时间戳?

否,iOS无法保证你的应用程序在后台保持活动状态。文件说:

但是,在应用程序在后台运行(未挂起)并且系统出于某种原因需要终止它的情况下,可以调用此方法


(文档)

从iOS 7开始,您的用例现在很容易支持。在iOS 7之前,您的应用程序可以注册有关该外设的通知,当系统有通知要发送时,它会在后台被唤醒。但是,如果应用程序在后台运行或重新启动时,系统受到内存压力,则不会重新启动。iOS 7在
CBCentralManager
cbperipheraldmanager
中添加了状态恢复功能,因此,现在操作系统将以有限的容量重新启动应用程序,即使应用程序因上述任一情况而未运行。有关更多信息,请参阅

简而言之,对于您的用例,您可以执行以下操作:

  • 继续支持
    bluetooth central
    作为后台执行模式
  • 选择国家保护和恢复,如“增加对国家保护和恢复的支持”所述

使用IOS7BLE状态保存和恢复

如果由于内存压力,您的应用程序被IOS终止(这就是为什么您的应用程序在几天后无法工作),它将无法处理蓝牙代理。在这种情况下,如果您使用状态保留和恢复,您的应用程序可以重新启动到后台再次运行,也只需10秒。10秒后,它将移动到暂停状态。 只有在这种情况下,才能触发CBCentralManager的遗嘱恢复财产。


祝你好运。

也就是说,在后台使用数天后,你的应用程序几乎不可能保持活动状态。这个答案是不正确的。在app Store中查看应用程序“黑暗天空”。这是一个基于位置的天气应用程序。它已经在我手机的后台运行了好几个月,并在下雨时不断通知我。该应用程序可能使用推送通知。因此,应用程序不必在后台运行。请注意,iOS7将引入新功能来解决此问题。这将很难处理。@ChristophWimberger我怀疑你关于Dropbox使用定位服务的建议1)它应该请求用户允许使用定位服务,但我不知道它曾经这样做过。2) 我认为以这种方式使用位置服务违反了应用商店的政策你能为你的信息来源提供一个链接吗