STE*_*TEX 6 iphone ios core-bluetooth bluetooth-lowenergy swift
希望在这里得到一些意见.
在我目前的iOS项目中,我使用的是带有swift的CoreBluetooth.该应用程序可以在后台使用CoreBluetooth进行通信,基本上可以正常工作.外围设备需要与iOS设备建立活动连接才能按预期工作.只要连接中断,外围设备就会停止当前操作.当应用程序因内存压力而关闭时,也会发生这种情况.在这种情况下,外围设备不应停止工作,因此存在问题.为了解决这个问题,我按照苹果核心蓝牙编程指南实现了状态保存和恢复后台模式,主要说:
我强制iOS使用这个常见项目在后台关闭应用程序:BackgroundKill.当然应用程序不再以调试模式运行,这就是为什么我在重要的位置添加一些NSLog语句以在设备控制台中查找.好消息:当应用程序终止时,连接不再被取消,iOS现在按预期运行以保持连接,因此外围设备不会停止工作.罢工!除了应用程序订阅的电池服务之外,在此期间中央和外围设备之间没有通信.建立有效连接的唯一原因是防止外围设备停止工作.
现在手动重新启动应用程序时,没有提到的NSLogs出现.永远不会调用willRestoreState委托,并且launchOptions为nil.我在实例化CentralManager时尝试使用队列"DISPATCH_QUEUE_CONCURRENT"而不是nil.没有效果.
在重新启动应用程序时,我应该如何使用保留的连接?为什么从不调用willRestoreState委托?我在这里错过了什么吗?为了使用状态保存和恢复,是否必须在系统后台/强制关闭时接收数据?
谢谢你的帮助.:)
最后做了一些测试并得到了结果.事实证明,应用程序在需要时启动到后台,这意味着只要外围设备在保留的连接上发送数据.didFinishLaunchingWithOptions在这种情况下,iOS会启动应用程序,因此您有大约10秒的时间来检查您的启动选项并执行某些操作.所以我的问题与连接上没有数据发送的事实有关,似乎我们现在必须更改外围设备的固件来解决这个问题.
willRestoreState手动重新启动应用程序时会调用该委托.此时,iOS不仅提供最近使用的中央设备,还提供连接外围设备列表,甚至是最近订购的服务.因此,我只需要恢复我的对象,并从连接的外围设备的正确服务中获得订阅的特性,以便再次完全正常运行.
| 归档时间: |
|
| 查看次数: |
2757 次 |
| 最近记录: |