当用户退出某个区域时,我正在使用区域监控来运行一些代码。当应用程序在前台或后台运行时,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;
}
这是委托回调:
- (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:
方法被更频繁地调用,并带有以下错误描述:
错误域= kCLErrorDomain Code = 5“操作不能 完成。 (kCLErrorDomain错误5。)“
但即使有这个错误,当应用程序在前台时它按预期工作。 这是区域监测的预期行为吗?有人遇到过这种情况么?这可能是我得到错误的结果吗?
谢谢!
答案 0 :(得分:-1)
你有没有尝试等几分钟(4到15)? PS:在关闭iDevice之前,你的应用应该在前台。这是基于iBeacon测试...跳,它可以帮助你的情况。