2015-04-29 82 views
0

我有一套Estimote信标。当我使用estimote sdk时,我可以使用beacon来使用它。但问题是,当我使用iOS SDK进行监视和测距时,didRangeBeacons根本没有被调用。didrangebeacons不叫,即使didDetermineState被称为

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

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

回答

0

请确保您通过下面的清单了:

  1. 您已经于您的info.plist进入NSLocationAlwaysUsageDescription

  2. 你的财产self.beaconRegion是CLBeacon地区谁的UUID与您正在查找的UUID相匹配。

  3. 您的手机是iPhone 4S或更新版本,是在iOS 7或更高版本,并已开启蓝牙功能

我会改变的代码看起来是这样的:

- (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相匹配的所有信标。另外请注意,如果您尚未设置范围以避免额外的功能请拨打