didEnterRegion和didRangeBeacons之间的区别

时间:2014-10-08 07:11:11

标签: ios cllocationmanager ibeacon clbeacon clbeaconregion

在用例方面,didEnterRegion和didRangeBeacons之间的确切区别是什么?我的意思是当我应该实现didEnterRegion / didExitRegion以及何时应该实现didRangeBeacons?

每个委托方法的确切功能是什么?从苹果的文档来看,它不是很清楚。

- (void)locationManager:(CLLocationManager *)manager
         didEnterRegion:(CLRegion *)region
{
} 

- (void)locationManager:(CLLocationManager *)manager
        didRangeBeacons:(NSArray *)beacons
               inRegion:(CLBeaconRegion *)region
{
}

2 个答案:

答案 0 :(得分:6)

越过该区域的阈值(即检测信标),将调用

didEnterRegion一次。退出该区域后(即信标不再可见)将调用didExitRegion,如果您重新进入该区域,则会再次调用didEnterRegion

重复调用

didRangeBeacons,同时显示您正在测距的信标,为您提供更新的邻近信息。

一个常见的策略是监视信标区域,一旦调用didEnterRegion,就开始测量更新信标,在调用didExitRegion后停止测距。

另见 - The Location Programming Guide

答案 1 :(得分:1)

仅使用邻近UUID定义的CLBeaconRegion,或邻近UUID和主要ID可能对应于部署中的多个物理信标(我将在此处称为“部分限定区域”)。

didEnterRegion会在设备首次进入与CLBeaconRegion匹配的一个或多个信标附近时通知,但不会详细说明哪些匹配的信标在附近。仅当所有匹配的信标超出范围时才会调用didExitRegion

输入区域后,测距信标有两种用途:

  1. 获取与部分合格区域对应的附近信标的详细信息。
  2. 此信息作为didRangeBeacons个对象的数组提供给CLBeacon。注意,信标集可以随着时间而改变而设备不离开该区域并且接收didExitRegion(只要至少一个匹配的信标在范围内,该设备在该区域中)。这意味着使用部分限定区域但仍关心特定信标的应用程序需要处理didRangeBeacons的重复调用。

    1. 获取CLBeacon个对象中提供的邻近度信息。
    2. 即使使用完全合格的区域,这也可能是相关的。当设备在区域内移动时,接近度会发生变化,因此需要处理didRangeBeacons的重复调用。