locationManager:didExitRegion:屏幕关闭时未调用

时间:2014-03-02 11:18:03

标签: ios iphone objective-c core-location geofencing

当用户退出某个区域时,我正在使用区域监控来运行一些代码。当应用程序在前台或后台运行时,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。)“

但即使有这个错误,当应用程序在前台时它按预期工作。 这是区域监测的预期行为吗?有人遇到过这种情况么?这可能是我得到错误的结果吗?

谢谢!

1 个答案:

答案 0 :(得分:-1)

你有没有尝试等几分钟(4到15)? PS:在关闭iDevice之前,你的应用应该在前台。这是基于iBeacon测试...跳,它可以帮助你的情况。