gpt4 book ai didi

iOS 核心蓝牙 : State Preservation and Restoration

转载 作者:搜寻专家 更新时间:2023-10-30 22:09:57 28 4
gpt4 key购买 nike

希望在这里得到一些意见。

在我当前的 iOS 项目中,我使用 CoreBluetooth 和 swift。该应用程序可以在后台使用 CoreBluetooth 进行通信,这基本上可以正常工作。外围设备需要与 iOS 设备建立有效连接才能按预期工作。每当连接中断时,外围设备都会停止其当前操作。当应用程序由于内存压力而关闭时也会发生这种情况。在那种情况下,外围设备不应该停止工作,所以有问题。为了解决,我关注了apples core bluetooth programming guide实现状态保存和恢复后台模式,基本上说:

  1. 使用恢复标识符初始化 CentralManager。代表 = self 。
  2. 实现 willRestoreState 委托(delegate)方法。 NSLog 的东西
  3. 检查特殊键的启动选项。 NSLog 的东西。

我使用以下常见项目强制 iOS 在后台关闭应用程序:BackgroundKill .当然,该应用程序不再以 Debug模式运行,这就是为什么我在重要位置添加了一些 NSLog 语句以在设备控制台中查找的原因。好消息:当应用程序终止时,连接不会再被取消,iOS 现在会按预期保持连接,这样外围设备就不会停止工作。罢工!除了应用程序订阅的电池服务外,在此期间中央和外围设备之间没有通信。建立事件连接的唯一原因是防止外围设备停止工作。

现在手动重新启动应用程序时,上述 NSLog 均未显示。永远不会调用 willRestoreState 委托(delegate),并且 launchOptions 为零。在实例化 CentralManager 时,我尝试使用队列“DISPATCH_QUEUE_CONCURRENT”而不是 nil。没有效果。

重新启动应用程序时我应该如何使用保留的连接?为什么从未调用 willRestoreState 委托(delegate)?我在这里错过了什么吗?为了使用状态保存和恢复,是否必须在系统后台/强制关闭时接收数据?

感谢您的帮助。 :)

最佳答案

终于做了一些测试,得到了结果。事实证明,该应用程序会在需要时启动到后台,这意味着每当外围设备在保留的连接上发送数据时。在这种情况下,iOS 通过 didFinishLaunchingWithOptions 启动应用程序,因此您有大约 10 秒的时间来检查您的启动选项并执行一些操作。所以我的问题与连接上没有发送数据这一事实有关,看来我们现在必须更改外围设备的固件来解决这个问题。

委托(delegate) willRestoreState 在手动重新启动应用程序时被调用。此时 iOS 不仅提供了最近使用的 central,还提供了连接的外围设备列表,甚至是最近订阅的服务。所以我只需要恢复我的对象并从连接的外围设备的正确服务中获取订阅的特性,以便再次完全正常运行。

关于iOS 核心蓝牙 : State Preservation and Restoration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27797665/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com