【发布时间】:2016-03-17 22:26:30
【问题描述】:
我正在尝试为 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]后,委托方法locationManager:monitoringDidFailForRegion:withError:返回错误码4:“操作无法完成”。
用startRangingBeaconsInRegion 交换requestStateForRegion 似乎绕过了这个错误并且locationManager:didRangeBeacons:inRegion: 被成功调用。
如果仅授予kCLAuthorizationStatusAuthorizedWhenInUse,[locationManager requestStateForRegion:region]; 将导致错误代码 4,这是一个已知问题吗?
【问题讨论】:
-
您的应用是否已禁用后台刷新?
-
它没有被禁用。在
Capabilities、Background Modes下,我检查了Location Updates。在设备上,General>Background App Refresh下,后台应用刷新一般是开启的。当应用程序在前台时会发生此错误。 -
现在拍摄黑暗,但你有没有试过打电话给
+requestWhenInUseAuthorization只是为了笑? -
是的,尝试请求WhenInUse。似乎是在 requestStateForRegion 上发生错误
-
啊,粗鲁。我的意思是问你试过
+requestAlwaysAuthorization吗?您在帖子中提到了+requestInWhenInUseAuthorization。
标签: ios objective-c cllocationmanager ibeacon clbeaconregion