我正在尝试为 iOS 应用程序实现 iBeacon 范围。
[locationManager requestAlwaysAuthorization];
CLBeaconRegion * region = [self regionFromUUID:uuid];
[locationManager startMonitoringForRegion:region];
为了确定设备是在区域内还是区域外:
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
{
[locationManager requestStateForRegion:region];
}
这成功调用:
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {
if (state == CLRegionStateInside) {
[locationManager startRangingBeaconsInRegion:(CLBeaconRegion*)region];
} else {
[locationManager stopRangingBeaconsInRegion:(CLBeaconRegion*)region];
}
}
并且该应用程序已成功使用
locationManager:didRangeBeacons:inRegion:
。我遇到的问题是使用
requestWhenInUseAuthorization
。 locationManager:didStartMonitoringForRegion:
调用 [location requestStateForRegion:region]
后,委托(delegate)方法 locationManager:monitoringDidFailForRegion:withError:
返回错误代码 4:“操作无法完成”。用
requestStateForRegion
交换 startRangingBeaconsInRegion
似乎绕过了这个错误并且成功调用了 locationManager:didRangeBeacons:inRegion:
。如果仅授予
[locationManager requestStateForRegion:region];
,那么这是 kCLAuthorizationStatusAuthorizedWhenInUse
会导致错误代码 4 的已知问题吗? 最佳答案
Region Monitoring 的 Apple 文档因为这段摘录而困扰着我:
我在想 kCLAuthorizationStatusAuthorized
(在 iOS 8 中已弃用)将包含 kCLAuthorizationStatusAuthorizedAlways
和 kCLAuthorizationStatusAuthorizedWhenInUse
,因为它们都是“授权”的特殊类型。
感谢@heypiotr,我决定实际查看 Apple Docs Declaration 并注意到枚举声明如下:
kCLAuthorizationStatusAuthorized,
kCLAuthorizationStatusAuthorizedAlways = kCLAuthorizationStatusAuthorized,
kCLAuthorizationStatusAuthorizedWhenInUse
因此,
requestStateForRegion
需要 kCLAuthorizationStatusAuthorizedAlways
因为这是唯一与 kCLAuthorizationStatusAuthorized
相同的值,并且根据 Apple 的说法,只有 kCLAuthorizationStatusAuthorized
可以用于监控。关于ios - 带有 "When In Use"位置访问错误代码 4 的 CLLocationManager requestStateForRegion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36072792/