iOS 应用中自动连接到蓝牙设备

5

我正在编写一款iOS应用程序,将使用低功耗蓝牙(BLE)与设备进行通信。

当我的已连接设备超出范围时,我的应用程序会收到断开连接事件。

但是当设备重新回到范围时,我没有收到任何连接事件。

请建议任何一种方法来检测设备何时回到范围内。


2
如果您能够发布一段相关的代码示例,那将会很有帮助。您是在尝试重新连接到外设吗? - fractalwrench
4个回答

0

当您的设备断开连接或超出蓝牙范围时,您无需扫描外围设备,因为它已经扫描了BLE设备。

当BLE设备断开连接时,请在didDisconnectPeripheral委托方法中调用函数[centralObj connectPeripheral:peripheral options:nil];


0

当您收到设备不再可达的事件时,可以启动一个方法来持续检查设备是否仍然不可达。

例如:while(isConnected==false)... 您说如果设备断开连接会收到通知,因此您可以使用该事件来启动这样的方法。


非常感谢您的回复。我在后台线程中开始搜索,但这可能会导致应用被苹果拒绝。因为在iOS中不允许后台轮询。 - Phillip

0
当您收到断开连接事件时,只需重新启动扫描功能:scanForPeripheralsWithServices或者您可以设置扫描模式以接受重复键:[_manager scanForPeripheralsWithServices:self.targetDeviceServiceIDs options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@YES}]。这意味着相同的设备会被发现多次,直到您停止扫描。

非常感谢您的回复。但是,当我收到断开连接事件并在后台开始扫描时,应用程序可能会被苹果拒绝。因为在iOS中不允许后台轮询。 - Phillip
1
在这种情况下,您可以保留已连接的外围设备,并设置一个定时器,每隔几秒钟尝试重新连接它。它将触发以下方法之一: - centralManager:didConnectPeripheral:- centralManager:didFailToConnectPeripheral:error: - Terence

0

如果连接超时,只需在断开方法中重新连接即可。无需开始扫描,它会自动尝试重新连接直到进入范围。


这是正确的。连接尝试不会超时(正如苹果文档中所述:https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCentralManager_Class/#//apple_ref/occ/instm/CBCentralManager/connectPeripheral:options:)。只需确保还保留对外围设备对象的引用,否则连接将被取消。 - p2pkit
然而,如果您需要在后台模式下长时间不活动工作,则可能会遇到麻烦。如果蓝牙已关闭并重新打开,无论用户是否在UI中执行操作或蓝牙崩溃并重新启动系统都可能会崩溃您的应用程序,并且它将无法重新启动。 - Emil

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