我正在尝试使用UUID作为特定信标的标识符(在这种情况下使用手机)。我知道主要和次要用于执行此操作,但我宁愿使用UUID或标识符字符串。
话虽如此,无论如何,无论使用CLBeacon API的UUID,都能扫描信标吗?
答案 0 :(得分:6)
在Android上,您可以扫描所有UUID。在iOS上你不能。见:
http://developer.radiusnetworks.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons.html
在iOS上,CoreLocation限制您监控最多20个不同的UUID。测距没有20的限制,但你仍然必须提前知道UUID。
答案 1 :(得分:1)
据我所知,监控具有不同UUID的iBeacon区域没有限制。你可以这样做:
NSArray *uuids = [NSArray arrayWithObjects:@"####-####-###1", @"####-####-###2", nil];
for (NSString *uuidString in uuids) {
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:uuidString] identifier:identifier];
region.notifyOnEntry = entry;
region.notifyOnExit = exit;
region.notifyEntryStateOnDisplay = YES;
[_locationManager startMonitoringForRegion:region];
}
您只需要确保在locationManager的委托方法中检查UUID。你可以使用这样的东西:
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {
if ([region isKindOfClass:[CLBeaconRegion class]]) {
CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;
NSLog(@"ProximityUUID:%@", beaconRegion.proximityUUID);
NSLog(@"ProximityMajor:%@", beaconRegion.major);
NSLog(@"ProximityMinorD:%@", beaconRegion.minor);
}
}
您应该看到使用不同的UUID调用委托方法。
希望这有帮助。