locationmanager didenterregion没有被调用

时间:2014-08-11 22:00:22

标签: core-location ibeacon

假设我的代码如下:

- (void)locationManager:(CLLocationManager *)manager
        didRangeBeacons:(NSArray *)beacons
               inRegion:(CLBeaconRegion *)region {
    //Handle beacons found during ranging

}

-(void)initBeaconRegion
{

    NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDString:@"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"];

    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID major:345 minor:678 identifier:@"MyBeaconIdentifier"];
    self.beaconRegion.notifyEntryStateOnDisplay = NO; //Used for Monitoring
    self.beaconRegion.notifyOnEntry = YES; //Used for Monitoring
    self.beaconRegion.notifyOnExit = YES; //Used for Monitoring

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

    if ([region isKindOfClass:[CLBeaconRegion class]]) {
        CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;

        //now start ranging
//        [_locationManager startRangingBeaconsInRegion:beaconRegion];
    }
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.locationManager = [[CLLocationManager alloc] init];
    [self initBeaconRegion];
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
    NSLog(@"monitored regions %@",self.locationManager.monitoredRegions);
}

和一些名为xBeacon广告的iPad应用程序使用相同的UUID,主要和次要,这不起作用。我究竟做错了什么?我应该使用应用程序接近广告设备,还是等待更长时间?

尝试使用Estimote beacon应用程序,两个应用程序都可以正常工作,因为我在Mac上的Beacon扫描仪上查看它。

2 个答案:

答案 0 :(得分:2)

您希望调用信标监控回调,但您没有开始监控 - 您正在启动范围。尝试更改此行:

   [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];

为:

   [self.locationManager startMonitoringRegion:self.beaconRegion];

此外,您需要将self.locationManager.delegate = self设置为@ luca-corti建议。

如果您仍然没有收到回叫,请尝试使用我的Locate app验证您的测试信标实际上是否使用您期望的标识符进行传输。

答案 1 :(得分:1)

在实例化self.locationManager.delegate = self后,您需要设置CLLocationManager。否则代表团将无法工作。