我使用苹果AirLocate演示应用程序来创建一个iBeacon。
这个信号是由安卓信标探测器应用程序接收到的successfully信号。
但是,当我使用以下代码检测iBeacon 8中的iOS时,信标将不会显示:
self.coreLocation = [[CLLocationManager alloc] init];
_coreLocation.delegate = self;
NSString *identifier = [NSString stringWithFormat:@"com.example.apple-samplecode.AirLocate.%@", @"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"];
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:identifier];
if(region) {
region.notifyOnEntry = YES;
region.notifyOnExit = YES;
[_coreLocation startMonitoringForRegion:region];
}无论我在标识符字段中使用哪个值,CLLocationManager都不会找到信标。它的代表didDetermineState:和didRangeBeacons:从未被调用过。然而,委托monitoringDidFailForRegion收到了以下消息:
手术无法完成。(kCLErrorDomain错误4.)
在在线查找了一些文档之后,错误代码4表示:
用户拒绝访问区域监视服务。
但是,我使用以下代码来证明我的应用程序被授权监视区域:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if(status == kCLAuthorizationStatusDenied) {
NSLog(@"didChangeAuthorizationStatus: Denied");
} else if(status == kCLAuthorizationStatusNotDetermined) {
NSLog(@"didChangeAuthorizationStatus: Not Determined");
} else if(status == kCLAuthorizationStatusAuthorizedAlways) {
NSLog(@"didChangeAuthorizationStatus: Authorized Always");
} else if(status == kCLAuthorizationStatusAuthorizedWhenInUse) {
NSLog(@"didChangeAuthorizationStatus: Authorized When In Use");
} else if(status == kCLAuthorizationStatusRestricted) {
NSLog(@"didChangeAuthorizationStatus: Restricted");
} else {
NSLog(@"didChangeAuthorizationStatus: Unknown");
}
}它还会:
didChangeAuthorizationStatus:授权时使用
鉴于此:
NSLocationWhenInUseUsageDescription中添加了Info.plistInfo.plist添加了相应的条目)[self.coreLocation requestWhenInUseAuthorization]请求“何时使用”授权[CLLocationManager isMonitoringAvailableForClass:[CLRegion class]]返回是我错过了什么导致这个错误4?另外,是否需要标识符与iBeacon标识符匹配(为什么Android可以检测所有信标,但iOS需要指定标识符)?
参考资料:区域监测与iBeacon
https://stackoverflow.com/questions/27897475
复制相似问题