locationManager:didRangeBeacons没有检测到相同的信标两次

时间:2017-05-31 14:06:44

标签: ios swift ibeacon beacon

后台模式 中使用ibeacons进行测试时,我发现使用以下方法检测出一个大问题:

  

FOR FORROUND LANDING FINE

func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {}

我想要实现的想法是自己管理第二次检测到信标的时间,让我靠近信标。

问题是当第二次尝试检测同一个信标时(有时甚至是第一次检测到其他信标),由于一些奇怪的原因,这个功能在第一次检测后不再被调用。

  

唯一的方法是从灯塔中取出电池(间歇性)或拿走我的灯塔并走路直到离开检测区(这总是有效)

最后我使用此功能进行验证:

func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) {

    if (state == CLRegionState.inside)
    {
      print("didDetermineState inside!!!!")
    }
    else if (state == CLRegionState.outside)
    {
      print("didDetermineState outside!!!!")
    }
    else
    {
      print("didDetermineState Other!!!!")
    }
  }

仅执行此2选项中的某些选项,该功能再次被触发

提前致谢。

更新

考虑this answerdidRangeBeacons应该不断执行,但我正在试验didEnterRegion问题。

我使用这两个功能:

 - didRangeBeacons: for beacons visibles in ranging.
 - didEnterRegion: for Geofencing and beacons too

1 个答案:

答案 0 :(得分:2)

iOS上的信标范围通常仅在您的应用位于前台时才有效。 在应用程序进入后台后,在后台测距的时间限制为10秒。如果您还在监控(听起来像是这样),那么每当它还会获得额外10秒的背景测距时间有一个进入/退出事件 - 例如如果CLBeaconRegion中的所有信标都被检测到(退出),或者在第一次检测到(退出)事件后检测到一个信标(进入)。这可能解释了你所看到的。

您可以根据要求将背景测距时间延长至180秒,但您只能使用特殊背景模式无限期地继续播放。我写了一篇博文,详细描述了这一点here.