在使用信标(iOS设备)进行测试时,我发现侦听器信标给出了一些意外行为。即使信标进入区域,也不会调用locationManager:didEnterRegion方法。但是locationManager:didRangeBeacons:inRegion:被正确调用,并且在那里显示了检测到的信标。

- (void)startListening{

self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager setDelegate:self];
NSUUID *myProximityUUID = [[NSUUID alloc]
                           initWithUUIDString:IDENTIFIER];
_beaconRegion = [[CLBeaconRegion alloc]
                 initWithProximityUUID:myProximityUUID
                 identifier:kPFTransmitterIdentifier];
_beaconRegion.notifyEntryStateOnDisplay = YES;
_beaconRegion.notifyOnEntry  =YES;
[self.locationManager startMonitoringForRegion:self.beaconRegion];

[self.locationManager requestStateForRegion:self.beaconRegion];
//[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];

}

这是我写的代码。

我需要在侦听器应用程序进入特定区域时创建本地通知,即使该应用程序未运行也是如此。

最佳答案

您的代码可能没有问题。我注意到,如果在检测器已经位于信标区域内(在其旁边)时打开测试信标,则不会收到任何有关进入信标区域的通知。这很可能是因为iOS没有检测到边界。 iOS似乎在检测到您跨越“超出区域”和“内部区域”(沿任一方向)之间的边界时发出通知,然后才调用适当的委托方法。
要对此进行测试,只需打开信标,但将检测器保持关闭即可。然后,如上面的davidgyoung所示,从信标走200英尺。然后打开检测器并向信标走去。输入区域时,您应该收到“didEnterBeaconRegion”通知。
您可以尝试做的另一件事是实现“locationManagerDidDetermineStateForRegion”委托方法,只要定义的受监视区域的状态发生变化(无论何时打开检测器),都将调用该方法。如果这样做,即使启动时检测器已位于信标区域内,也应获得回调。但是请注意,这不会在后台发生,因此您仍然需要其他回调。

关于ios - locationManager:didEnterRegion和didExitRegion永远不会被调用:iBeacon,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20496776/

10-09 09:41