使用带有CoreBluetooth的BLE(没有iBeacon),有没有办法在设备收到蓝牙信号时唤醒应用程序未运行的应用程序?
我正在用redbearlab的BLE Shield(http://redbearlab.com/bleshield/)模拟一个灯塔。
谢谢, DAN
*更新03/05/14 *
看起来Apple已经推出了iOS 7.1的主要更新:现在,如果iOS检测到与您的应用匹配的UUID,它将为您打开应用。该应用程序只需要安装,它不必运行(AppDelegate中的逻辑需要回答唤醒呼叫)。
答案 0 :(得分:9)
如果应用程序在后台运行然后关闭(我的意思是终止 - 由于来自其他应用程序的内存压力,当您双击主页按钮时在后台应用程序列表中不会再看到它),那么当调用委托时,iOS将会再次唤醒它(假设您在.plist中列出了后台模式)。
如果应用程序在后台运行,然后由用户关闭(我的意思是此处终止。所以用户双击以获取在后台运行的应用程序列表,然后在后台列表中单击您的应用程序,直到它摆动然后按下应用程序旁边的'x'来杀死它)然后这清楚地表明用户不希望应用程序在后台运行并且应用程序将不会重新启动。用户必须重新启动应用程序,以便其代表在后台重新开始运行(iOS7中的新功能)。
更新: 我不确定这是否在文档中,但它在CoreBluetooth WWDC 2013 Video中。我建议你看。他们花了很多关于CoreBluetooth在后台运行的视频。
答案 1 :(得分:2)
根据我的理解,如果你的应用之前没有与BLE外设连接,那么没有。
如果您的应用之前已与BLE外围设备连接,请使用:
-connectPeripheral:选项
连接请求不会超时。调用此方法的最佳位置是您的应用程序失去与BLE外围设备的连接。当您在CBCentralManagerDelegate协议中失去与外围设备的连接时,您将收到通知:
-centralManager:didDisconnectPeripheral:错误
因此,下次您的应用程序进入BLE外设的范围时,它将触发此方法。另请注意,初始化CBCentralManager时需要设置状态保存和恢复。
答案 2 :(得分:1)
当任何CBCentralManagerDelegate或CBPeripheralDelegate委托方法为时,系统会唤醒您的应用程序 调用,允许您的应用处理重要的中心角色事件, 例如,当建立或拆除连接时,当a 外围设备发送更新的特征值,并在中心时发送 经理的状态变化。
要在后台执行某些外围角色任务,您 必须包含UIBackgroundModes键和蓝牙外设 应用的Info.plist文件中的值。当这个键值对时 包含在应用程序的Info.plist文件中,系统会将您的应用程序唤醒 处理读,写和订阅事件。
答案 3 :(得分:-1)
您可以尝试在info.plist中声明voip。目前,我的应用程序在一段时间后自动重新启动,甚至用户终止它。