如何唤醒iOS应用程序与蓝牙信号(BLE)

使用BLE与CoreBluetooth(没有iBeacon),是否有一种方法来唤醒应用程序未运行的应用程序,当设备收到蓝牙信号?

我正在用redbearlab的BLE Shield( http://redbearlab.com/bleshield/ )模拟灯塔。

谢谢,DAN

*更新03/05/14 *

看起来像苹果公司已经推出了与iOS 7.1的重大更新:现在iOS会为您打开您的应用程序,如果它检测到一个UUID匹配您的应用程序。 该应用程序只需要安装,它不需要运行(AppDelegate中的逻辑需要回答唤醒电话)。

如果应用程序在后台运行,然后closures(由于其他应用程序的内存压力,我的意思是在这里终止了 – 当你双击主页button时,你不会在后台应用程序列表中看到它),那么iOS将会当代理被调用时(假设你有在.plist中列出的背景模式),再次唤醒它。

如果应用程序在后台运行,然后由用户closures(我的意思是在这里终止,所以用户双击,获得在后台运行的应用程序列表,然后点击你的应用程序在后台列表中,直到它摆动,然后按下应用程序旁边的“x”来杀死它),那么这明确表明用户不希望应用程序在后台运行,应用程序将不会重新启动。 用户必须重新启动应用程序的代表,以开始在后台运行(iOS7中的新function)。

更新:我不确定这是否在文档中,但它是在CoreBluetooth WWDC 2013video。 我build议你看。 他们花了很大一部分的video介绍了CoreBluetooth如何在后台运行。

据我所知,如果您的应用程序以前没有连接到BLE外设,那么不。

如果您的应用程序以前与BLE外围设备连接,请使用:

-connectPeripheral:选项

连接请求不会超时。 调用此方法的最佳位置是当您的应用程序与BLE外设失去连接时。 当您连接到CBCentralManagerDelegate协议中的外设时,您将收到通知:

-centralManager:didDisconnectPeripheral:错误

所以下一次您的应用程序进入BLE外设范围时,会触发此方法。 另外请注意,初始化CBCentralManager时需要设置状态保存和恢复。

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

当调用任何CBCentralManagerDelegate或CBPeripheralDelegate委托方法时,系统会唤醒您的应用程序,从而允许您的应用程序处理重要的中央angular色事件,例如build立连接或断开连接时,外设发送更新的特征值时以及中央经理的状态变化。

要在后台执行某些外围angular色任务,您必须在应用程序的Info.plist文件中包含具有蓝牙外设值的UIBackgroundModes项。 当此键 – 值对包含在应用程序的Info.plist文件中时,系统会唤醒您的应用程序以处理读取,写入和订阅事件。

您可以尝试在info.plist中声明voip。 目前,我的应用程序在一段时间后自动重新启动,甚至用户终止它。