2014-01-21 48 views
2

在iOS上,在我的应用程序委托中,我开始区域监视,只要进入信标区域,就使用locationManager:didRangeBeacons:inRegion启动测距逻辑。根据Apple文档,只有当区域在范围内或超出范围或范围发生变化时才应调用此方法。测距信标间隔

我的问题是,只要我在区域内,我就会每秒接到一次这个方法的调用。如何减少调用这个方法的次数,同时还在测量范围内?

回答

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收集更多信息。

+0

我想要在后台处理测距。当用户进入信标范围时,我想获取关于信标的详细信息 - 并且这种情况发生在这种方法中。我对近距离信息不感兴趣,所以这就是为什么我不希望这种方法被称为如此之多。我还看到,测距需要比区域监测更多的功率,这可能会消耗用户电池。 –

+0

已编辑答案 – CW0007007

6

locationManager:didRangeBeacons:inRegion被称为每秒一次,无论如何。每次调用时,beacons参数将包含应用程序当前可以看到的所有信标的数组,按照邻近程度排序。无法限制调用此方法的频率,因此无法停止测距。

监测地区(而不是测距),您的应用程序将有didEnterRegion:didExitRegion调用,didDetermineState:一起。请参阅this answer了解更多细节。

+0

有没有办法仅使用区域信息获取信标信息(基本上,要在后台获取信标信息)? –

+0

当'didEnterRegion:'被调用时,您似乎可以调用'startRangingBeaconsInRegion:',但该应用只会在非常短的时间内唤醒。不建议在后台尝试做这件事。 –