在iOS上,在我的应用程序委托中,我开始进行区域监视,一旦进入信标区域,我就使用locationManager:didRangeBeacons:inRegion启动测距逻辑。根据Apple文档,只有当区域在范围内或超出范围或范围发生变化时,才应调用此方法。
我的问题是,只要我在区域内,我每秒都会调用此方法。如何在仍然测距的情况下减少对此方法的调用次数?
答案 0 :(得分:7)
locationManager:didRangeBeacons:inRegion
被称为每秒一次,无论如何。每次调用时,beacons
参数都将包含应用程序当前可以看到的所有信标的数组,按邻近顺序排序。除了停止测距之外,没有办法限制调用此方法的频率。
当监控区域(而不是测距)时,您的应用会调用didEnterRegion:
和didExitRegion
以及didDetermineState:
。有关详细信息,请参阅this answer。
答案 1 :(得分:1)
根据文件:
“只要信标进入范围或超出范围,位置管理器就会调用此方法。位置管理器也会在信标范围发生变化时调用此方法;例如,当信标靠近时。”
可能发生的事情是范围正在略微改变,这会导致您描述的行为。
为什么这是一个问题
编辑:
在后台,您将收到有关通过应用委托方法输入区域的通知:
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region{}
您可以使用它来确定状态:
if(state == CLRegionStateInside)
{
//Inside a region:
}
else if(state == CLRegionStateOutside)
{
//Outside a region
}
else {
//Something else
}
您可以使用它来收集有限数量的信息或提示用户通过本地通知加载应用程序。当您的应用程序恢复后,您可以通过locationManager收集更多信息。