【问题标题】:startMonitoringForRegion doesn't fire didEnterRegion and didExitRegionstartMonitoringForRegion 不会触发 didEnterRegion 和 didExitRegion
【发布时间】:2013-12-13 00:58:23
【问题描述】:

我正在使用 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:didEnterRegion:locationManager:didExitRegion:

有人面临同样的行为吗?

【问题讨论】:

  • 您是否期望 didEnter/ExitRegion: 在信标的当前范围发生变化时触发(即接近立即)?如果是这样,那是设计使然。
  • 嗨,Erik,我希望在我进入/退出该区域时会触发 didEnter/ExitRegion,而不是基于接近度。
  • 遇到同样的问题,你是怎么解决的?
  • 如果有人在监控多个信标时遇到问题,请查看此答案以获得可能的解决方案:stackoverflow.com/a/21174691/381233

标签: ios cllocationmanager ibeacon


【解决方案1】:

有几个项目需要检查。解决我的问题的方法是在您设备的设置中启用后台应用刷新(请参见下面的屏幕截图)。我已禁用此功能以节省电池电量。如果禁用此功能,监控将不起作用。

如果这不能解决您的问题,那么您可以阅读一篇很棒的帖子,其中详细介绍了要解决的所有问题。

iBeacon StartMonitoringForRegion Doesn’t Work


【讨论】:

  • 这对我有用。情况并不明显。
【解决方案2】:

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

这可能是因为 iOS 认为没有区域转换正在发生 - 你总是“在”该区域,因此没有转换。在后台发生转换最多可能需要 15 分钟(尽管如果您在前台进行测距,“out”应该在 4 秒内,“in”在 1 秒内。请参阅http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html

您可以通过在受监控区域上设置region.notifyEntryStateOnDisplay=YES; 来强制执行输入/输出区域回调,然后点击肩部按钮。这应该强制监控回调。如果您这样做并且没有看到我在上面建议添加的日志语句,我会感到非常惊讶。

【讨论】:

  • 嗨大卫,我已经设置了 region.notifyEntryStateOnDisplay=YES;然而,你让我想到了一件事。如果我已经进入该地区并运行我的应用程序,didEnterRegion 会被解雇吗?在 locationManager:didDetermineState:forRegion: 我可以检查状态 == CLRegionStateInside/CLRegionStateOutside 如果我已经留在该区域,所以我期待进入/退出方法以相同的方式触发。可能已经在工作,但我必须以不同的方式测试我的应用程序。
  • 马里奥,设置 region.notifyEntryStateOnDisplay=YES 是特殊的。当用户唤醒手机时,它导致对所有回调方法的额外调用。这是我所知道的在 iOS 认为没有状态更改时获得额外回调的最简单方法。不,您不会在应用程序启动时收到额外的回调 - 除非您拨打电话停止监视您的区域(使用完全相同的 ID)然后重新开始。成功重启也会给你额外的回调。
  • 一切正常。我认为在 exit/enterRegion 火灾之前有一点滞后。我的设备需要花一点时间才能知道我不在该地区。
  • 太棒了!你认为你的“滞后”与我在这篇博文中的测量结果一致吗?developer.radiusnetworks.com/2013/11/13/…。我想知道你是否看到了不同的东西。谢谢,大卫
【解决方案3】:

我几乎尝试了所有方法,但没有成功。 然后我只是重新启动了我的 iPhone ......它开始工作了。极好的。 我在使用 Estimote Beacons 时遇到了这个问题。

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多