问题陈述:如果我有多个BLE,我会逐个连接它们。但是现在当超过1个BLE同时超出范围时,我无法在核心蓝牙框架的中央管理器中检测到状态。
说明 -
1)如果我有一个BLE且我连接到该BLE,当该BLE超出范围时,它会调用- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
外设方法。
2)在- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
方法中,只要BLE再次出现在范围内,我就- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
要求将其连接起来。
3)当单个BLE一次超出范围时,此行为正常。当进入范围时再次连接。
4)但当多个BLE同时超出范围时,上述行为不能很好地发挥作用。
这是我的- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
代码
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
[self.btMainDashboardViewController.tagsTableView reloadData];
for (CBPeripheral *peripheral in self.btMainDashboardViewController.app.addedTagsArray) {
if (peripheral.state == CBPeripheralStateDisconnected) {
// if tag is not released go for autoconnection
[self.centralManager connectPeripheral:peripheral options:nil];
}
}
}
提前致谢。
答案 0 :(得分:0)
依赖于BLE连接和相应的回调不是检查设备是否超出范围的正确方法。因为操作系统或其他设备可以随时取消连接。
我建议使用打开重复项的BLE扫描,并通过RSSI(信号强度)跟踪设备。根据您的使用情况,当RSSI低于阈值或您停止扫描设备时,您可以确定设备超出范围。
希望这有帮助!