我有一套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");
答案 0 :(得分:1)
请确保您已完成以下核对清单:
您已在info.plist中输入了NSLocationAlwaysUsageDescription
您的属性self.beaconRegion是一个CLBeacon区域,其UUID与您要检测的UUID相匹配。
您的设备是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匹配的所有信标,无论主要和次要。另请注意,如果您尚未尝试避免额外的函数调用
,则应该只尝试开始测距