开始监控区域时,didEnterRegion和didExitRegion没有触发

10

我正在使用Estimote信标和区域进行一些测试。

阅读文档后,当我开始监视一个区域时,我会告诉我的代理正在监视特定的区域,但是didEnterRegiondidExitRegion从未触发。

我的代理会触发:

-(void)beaconManager:(ESTBeaconManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(ESTBeaconRegion *)region

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

我没有检查在locationManager:didFailWithError方法中是否发生了错误:

目前,我使用state手动运行两个私有方法,这些方法作为didEnter和didExit - 在这种情况下,我也能够监视区域,但我不知道为什么locationManager:didEnterRegionlocationManager:didExitRegion从未被调用。

是否有人遇到相同的问题?


你是否期望在信标的当前范围发生变化(即从近到立即)时,触发didEnter/ExitRegion事件?如果是这样的话,那就是设计上的如此。 - Erik Kerber
嗨,Erik,我希望在进入/离开区域时触发didEnter/ExitRegion事件,而不是基于接近程度。 - Mario Catena
你遇到了同样的问题,你是如何解决的? - Raj Pawan Gumdal
如果有人在监控多个信标时遇到问题,请查看此答案以获取可能的解决方案:https://dev59.com/Envaa4cB1Zd3GeqPBlHi#21174691 - newenglander
3个回答

5
有几个要点需要检查。其中解决我的问题的是在设备设置中启用后台应用刷新(见下面的截图)。我之前将其禁用以节省电池电量,但如果禁用该功能,监测将无法正常工作。
如果这不能解决您的问题,则可以阅读一篇很棒的文章,详细介绍了所有故障排除项目。

iBeacon StartMonitoringForRegion Doesn’t Work


Background App Refresh


这对我有用。这并不明显。 - Scott Sarnikowski

0

这应该可以工作。我想看看你设置监控的其余代码,并在didEnterRegion、didExitRegion和didDetermineState中放置NSLog语句(也记录状态值)。

可能是iOS认为没有区域转换发生——你总是“在”区域内,因此没有转换。转换可能需要长达15分钟才能在后台发生(尽管如果你在前台进行范围测量,“out”应该在4秒内完成,“in”应该在1秒内完成。请参见http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html

你可以通过在受监控的区域上设置region.notifyEntryStateOnDisplay=YES;,然后按下肩膀按钮来强制进行进出区域回调。这应该会强制进行监控回调。如果你这样做了,但没有看到我建议添加的日志语句,我会非常惊讶。


嗨David,我已经将region.notifyEntryStateOnDisplay设置为YES; 但是你让我想到了一件事。如果我已经在该区域内并运行我的应用程序,那么didEnterRegion是否会被触发? 在locationManager:didDetermineState:forRegion中,我可以检查状态 == CLRegionStateInside / CLRegionStateOutside,即使我已经在该区域中,因此我期望进入/退出方法以相同的方式触发。 可能已经工作了,但我必须以不同的方式测试我的应用程序。 - Mario Catena
Mario,设置region.notifyEntryStateOnDisplay=YES是特殊的。它将在用户唤醒手机时导致对所有回调方法的额外调用。这是我所知道的在iOS认为没有状态更改时获得额外回调的最简单方法。不,您不会在应用程序启动时获得额外的回调——除非您调用停止监视区域(具有完全相同的ID),然后再次开始。成功重新启动也将为您提供额外的回调。 - davidgyoung
一切都运行良好。我认为在退出/进入区域触发之前有一点延迟。我的设备需要一点时间才能理解我已经离开了该区域。 - Mario Catena
太好了!你认为你的“滞后”与我在这篇博客文章中的测量一致吗?http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html。我想知道你是否看到了不同的东西。谢谢,David - davidgyoung

0

我尝试了几乎所有的方法,但都没有起作用。 然后我简单地重启了我的iPhone……它就开始工作了。太神奇了。 我在使用Estimote Beacons时遇到了这个问题。


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