即使调用了didDetermineState,也没有调用didrangebeacons

时间:2015-04-29 07:21:25

标签: ios core-location ibeacon estimote

我有一套Estimote信标。当我使用estimote sdk时,我可以使用信标并使用它。但问题是,当我使用iOS SDK进行监控和测距时,根本不会调用didRangeBeacons。

我已开始测距,如下所示。当我使用断点检查时,调用该函数。

- (void) locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
    switch (state) {
        case CLRegionStateInside:
            [self.beaconManager startRangingBeaconsInRegion:self.beaconRegion];
            NSLog(@"Region CLRegionStateInside");

1 个答案:

答案 0 :(得分:1)

请确保您已完成以下核对清单:

  1. 您已在info.plist中输入了NSLocationAlwaysUsageDescription

  2. 您的属性self.beaconRegion是一个CLBeacon区域,其UUID与您要检测的UUID相匹配。

  3. 您的设备是iPhone 4S或更高版本,适用于iOS 7或更高版本,并已开启蓝牙

  4. 我会将代码更改为如下所示:

    - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(nonnull CLRegion *)region {
        CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;
                if (beaconRegion.major && beaconRegion.minor) {
                } else {
                    switch (state) {
                        case CLRegionStateUnknown:
                            // Handle this case when bluetooth is off.
                            break;
                        case CLRegionStateInside:
                            NSLog(@"Inside %@", region);
                            if (![self.locationManager.rangedRegions containsObject:beaconRegion]) {
                                [self.locationManager startRangingBeaconsInRegion:[[CLBeaconRegion alloc] initWithProximityUUID:beaconRegion.proximityUUID identifier:beaconRegion.proximityUUID.UUIDString]];
                            }
                            break;
                    case CLRegionStateOutside:
                        NSLog(@"Outside %@", region);
                        break;
                }
            }
        }
    

    您只需要对UUID进行范围调整,因为这将获取与该UUID匹配的所有信标,无论主要和次要。另请注意,如果您尚未尝试避免额外的函数调用

    ,则应该只尝试开始测距