我正在使用区域监控在用户退出区域时运行一些代码。当应用程序在前台或后台运行且设备屏幕位于 locationManger:didExitRegion:
时,将按预期调用。但是,当屏幕关闭时,我通常不会收到回调,直到我通过单击电源按钮打开屏幕,此时立即调用 locationManger:didExitRegion:
。所有测试均在 iPhone 5s 上完成。
以下是我设置区域的方式:
self.monitoredRegion = [self setupGeoFenceWithCenter:self.currentLocation radius:200];
[self.locationManager startMonitoringForRegion:self.monitoredRegion];
-(CLRegion *)setupGeoFenceWithCenter:(CLLocation *)center radius:(CGFloat)radius
{
if (radius > self.locationManager.maximumRegionMonitoringDistance)
{
radius = self.locationManager.maximumRegionMonitoringDistance;
}
CLRegion * region = [[CLCircularRegion alloc] initWithCenter:center.coordinate
radius:radius
identifier:@"geofence"];
return region;
}
这是委托(delegate)回调:
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
NSLog(@"Exited Region");
}
这是 CLLocationManager
初始化:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
此外,最近我注意到 locationManager:monitoringDidFailForRegion:withError:
方法被更频繁地调用,并出现以下错误描述:
Error Domain=kCLErrorDomain Code=5 "The operation couldn’t be completed. (kCLErrorDomain error 5.)"
但即使出现此错误,当应用程序位于前台时,它仍会按预期工作。 这是区域监控的预期行为吗?有人遇到过这种情况么?这可能是我收到的错误的结果吗?
谢谢!
最佳答案
您是否尝试等待几分钟(4 到 15 分钟)? PS:在关闭 iDevice 之前,您的应用程序应该处于前台。这是基于 iBeacon 测试...希望它对您的情况有所帮助。
关于ios - 位置管理器 :didExitRegion: not called when screen is off,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126866/