【问题标题】:locationManager:didRangeBeacons not detect the same beacon two timeslocationManager:didRangeBeacons 两次没有检测到同一个信标
【发布时间】:2017-05-31 14:06:43
【问题描述】:

后台模式 下使用 ibeacons 进行测试时,我发现使用以下方法进行检测存在很大问题:

前台工作正常

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

【问题讨论】:

  • 我认为您需要更详细地解释您期望发生的事情以及您所看到的内容。
  • 嗨@davidgyoung 感谢您的评论,请参阅我的问题中的The idea 部分。

标签: ios swift ibeacon beacon


【解决方案1】:

iOS 上的 Beacon 范围通常仅在您的应用处于前台时才有效。 在您的应用进入后台后,后台测距限制为 10 秒。如果您也在监控(听起来像),它还会获得额外 10 秒的后台测距时间有一个进入/退出事件——例如如果CLBeaconRegion 中的所有信标停止被检测(退出)或在退出事件后第一次检测到(进入)之后。这可能解释了您所看到的。

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

【讨论】:

  • 感谢您的澄清,我需要澄清的一个非常重要的一点是,这个错误只发生在后台,前台运行良好
  • extend background ranging time 是个好主意,但现在不是我的主要问题。考虑到这个答案:stackoverflow.com/questions/26251076/…didRangeBeacons 应该不断执行,但我正在尝试didEnterRegion 问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多