【发布时间】:2018-01-18 17:30:23
【问题描述】:
我在后台重新连接设备时遇到问题。当我离开 BLE 设备区域时,离开 iPhone 大约 3 分钟,等待后台然后返回,它不会重新连接。我试图在后台扫描外围设备,但即使我指定了 UUID,它也无法正常工作。有什么解决办法吗?
func centralManager(central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: NSError?) {
dispatch_async(dispatch_get_main_queue(), {
self.centralManager?.connectPeripheral(self.choosenPeripheral!, options: nil)
})
}
【问题讨论】:
-
您需要显示一些代码,但本质上,当您调用
didDisconnect委托方法时,您应该立即在外围设备上调用connect。然后,当它回到范围内时,您将重新连接到它。 -
我在didDisconnect中调用connect:gist.github.com/anonymous/d84ec2b18f9937d86d6ca44e6e3aa708我在第一次连接后设置了选择的外围设备,我也尝试在
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)中放置连接 -
请edit您的问题显示相关代码。
-
您不需要
Dispatch。您只需要centralManager.connectPeripheral(peripheral, options: nil)。确保您在应用功能上启用了适当的蓝牙后台模式。您还需要选择恢复蓝牙状态以进行长期后台操作,以便 iOS 可以在需要时重新启动您的应用程序。不要使用UIViewController来保存您的CBCentralManager和相关属性。使用由您的 AppDelegate 持有或作为 Singleton 实现的另一个类。 -
我将它存储在单例中。测试后我会尝试不发送和回复。感谢您的帮助!
标签: ios swift bluetooth-lowenergy core-bluetooth