在蓝牙重置之前,蓝牙设备在测距和监控 iBeacons 后无法连接
Posted
技术标签:
【中文标题】在蓝牙重置之前,蓝牙设备在测距和监控 iBeacons 后无法连接【英文标题】:Bluetooth devices can't connect after ranging and monitoring for iBeacons until Bluetooth is reset 【发布时间】:2014-07-22 21:09:25 【问题描述】:我编写了一个小型 iBeacon 演示应用程序,它可以检测信标范围,然后在第一次发现信标后监控范围内的信标。运行此应用程序后(如果它仍在后台),我发现设备无法建立新的蓝牙连接。例如,当我进入我的汽车时,我的汽车会无限尝试连接手机,但没有成功,直到我关闭并再次打开蓝牙。这似乎是在离开 iBeacons 区域后保持蓝牙处于活动状态的问题,但我已停止在 didExitRegion 上搜索信标。我什至尝试在视图消失或应用程序关闭时停止对信标的测距。为了在离开范围时正确关闭连接,是否需要采取其他步骤?
编辑:我只说在 OP 中进行测距,但我也确保在应用程序处于非活动状态和退出区域时停止监视信标区域。问题依旧
编辑 2:如果我必须说预期的特定行为,我希望能够在应用程序运行和后台运行时对信标进行范围和监控,而不会停止其他蓝牙连接。实际行为是它在这些情况下会跟踪信标,但不允许形成其他蓝牙连接。
初始化和开始监测信标的代码(在 viewDidLoad 中):
if (self.beaconManager == nil)
self.beaconManager = [[ESTBeaconManager alloc] init];
self.beaconManager.delegate = self;
if (self.icyMarshmallowRegion == nil)
self.icyMarshmallowRegion = [[ESTBeaconRegion alloc] initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID major:[kIcyMarshmallowMajor integerValue] minor:[kIcyMarshmallowMinor integerValue] identifier:kIcyMarshmallowRegionID];
self.icyMarshmallowRegion.notifyOnEntry = YES;
self.icyMarshmallowRegion.notifyEntryStateOnDisplay = YES;
[self.beaconManager startMonitoringForRegion:self.icyMarshmallowRegion];
停止监控的代码(在 didExitRegion 中):
[self.beaconManager stopMonitoringForRegion:self.icyMarshmallowRegion];
【问题讨论】:
你用的是哪个版本的ios? @Macistador 最新的非测试版 (7.1.2)。我没有可用于测试这是否是已在更新中解决的系统问题的 iOS 8 设备。 【参考方案1】:没有更多“关闭蓝牙活动”的步骤,无论如何,您的设备应该能够在监控iBeacon
区域时进行其他连接(我不确定测距,因为它更像是一个“活动”任务,但我敢打赌这是同一件事)
我在iOS7
中看到了很多与iBeacon
有关的奇怪行为,其中一部分已在iOS8
中修复,希望一切都会很快好起来。我认为你不应该为你描述的问题担心你的代码,等待iOS8
【讨论】:
认真的吗?他犯了一个错误——机会很高。 ios8 修复它的可能性很低 应用不能影响(或不应该)阻止操作系统使用其他蓝牙连接。如果问题出在他的应用程序内部,那么他犯错的可能性会非常高,但正如我们在应用程序之外所说的那样,这是一个操作系统问题。谈到 BLE,正如我所说,我最近看到了很多类似的问题 这让我印象深刻——那与他的应用无关 例如,当你退出一个 iBeacon 区域并再次进入内部时,IOS7 有时会暂时检测不到它,IOS8 已修复该问题。另一个例子是著名的 KCLErrorDomain 16(参见 ***.com/questions/20905843/… 或 ***.com/questions/22946022/…) @Macistador 它必须以某种方式与应用程序相关,因为此问题仅在运行该特定应用程序后才会出现。不过,这是一个很好的观点,单个应用程序不应该仅通过监视或测距信标来降低整个操作系统连接到蓝牙设备的能力。这是内置的功能,Apple 不希望拥有控制整个系统的能力。只要我有可以安装的设备,我就会看看 iOS 8 是否解决了这个问题,谢谢你的提示。 Daij-Djan:我可能确实搞砸了,如果你知道在哪里请告诉我。以上是关于在蓝牙重置之前,蓝牙设备在测距和监控 iBeacons 后无法连接的主要内容,如果未能解决你的问题,请参考以下文章