iOS下什么情况下可以使用Core Bluetooth恢复功能?

5
我使用状态保存和恢复。在使用kill(getpid(), SIGKILL);模拟内存压力后,应用程序被杀死然后唤醒,我从CBCentralManagerDelegate接收通知并可以与外围设备通信。
恢复是否适用于以下情况:
  1. iOS重启?
  2. 用户从多任务栏中关闭应用程序?
根据像这样的帖子:在应用程序被杀死后进行长期操作,第2点可能不可行。
如果恢复对于1或2点无效,那么在这些情况下我如何“重新连接”我的外围设备?

iOS重启后,我在设备控制台中看到以下内容。因此,某种方式iPhone收到了电池通知,但应用程序没有唤醒。我在iOS 7.1.1中进行了测试:10月14日12:56:13 iPhonexxxx BTLEServer [98]<Notice>:(注)外围设备"MyPeripheral"的电池电量为92% 10月14日12:56:18 iPhonexxxx BTLEServer [98]<Notice>:(注)外围设备"MyPeripheral"的电池电量为92% 10月14日12:56:23 iPhonexxxx BTLEServer [98]<Notice>:(注)外围设备"MyPeripheral"的电池电量为92% - Maria
1个回答

7

当应用程序被操作系统杀死时,可以进行恢复工作:

  • 调用kill(getpid(), SIGKILL)
  • 在后台运行时被操作系统杀死

除此之外的情况下,应用程序无法恢复。原因可能是用户希望关闭应用程序,所以不应该重新启动。这在重新启动时可能不成立,但苹果迄今为止一直保持这种做法。

到目前为止,尚未有关于iOS 8重新启动后行为变化的报告。

没有办法在任务栏关闭后重新启动,但是对于重新启动,有替代方案。您可以注册以便在重启后恢复应用程序的重大位置更改。这对我来说非常可靠。


不,我的意思是 CLLocationManager 的重大位置更改。iBeacons 也可能有效,但我还没有尝试过。 - allprog
我刚刚尝试了重要位置变化的解决方案,但是我无法使其正常工作。我的应用程序接收到第一个重要位置变化(当我进入后台时启动它),但是当我的手机重新启动时,我的应用程序没有被重新启动。手机需要重要位置变化才能重新启动它吗?谢谢。 - M to the K
1
当应用程序重新启动时,您将在AppDelegate的application:didFinishLaunchingWithOptions:回调中的启动选项中接收到UIApplicationLaunchOptionsLocationKey。如果看到这个选项,您需要确保初始化使用的CB*Managers。系统不会自动为您初始化它们。位置更改仅是可靠唤醒应用程序的一种手段。 - allprog
@allprog 我终于成功让它工作了!不过在重启后需要大约3分钟才能发送通知,你们也是这样吗?非常感谢你们的帮助! - M to the K
是的,3分钟听起来很合理。那也是我能够达到的最好成果。 - allprog
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接