Ios locationManager:DidextRegion:在屏幕关闭时不调用
我使用区域监视在用户退出区域时运行一些代码。当应用程序在前台或后台运行时,设备屏幕处于Ios locationManager:DidextRegion:在屏幕关闭时不调用,ios,iphone,objective-c,core-location,geofencing,Ios,Iphone,Objective C,Core Location,Geofencing,我使用区域监视在用户退出区域时运行一些代码。当应用程序在前台或后台运行时,设备屏幕处于locationManager:didExitRegion:将按预期调用。但是,当屏幕关闭时,我通常不会收到回调,直到我通过单击电源按钮打开屏幕,此时会立即调用locationmanager:didExitRegion:。所有的测试都是在iphone5s上完成的 以下是我设置区域的方式: self.monitoredRegion = [self setupGeoFenceWithCenter:self.curr
locationManager:didExitRegion:
将按预期调用。但是,当屏幕关闭时,我通常不会收到回调,直到我通过单击电源按钮打开屏幕,此时会立即调用locationmanager:didExitRegion:
。所有的测试都是在iphone5s上完成的
以下是我设置区域的方式:
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代码=5“无法执行该操作
已完成。(kCLErrorDomain错误5)。”
但即使有这个错误,当应用程序在前台时,它也能正常工作。
这是区域监测的预期行为吗?还有其他人遇到过这种情况吗?这可能是我犯的错误造成的吗
谢谢 您是否尝试过等待几分钟(4到15分钟)?PS:在关闭iDevice之前,你的应用程序应该在前台。这是基于iBeacon测试。。。希望它对你的情况有所帮助。4-15分钟似乎太长了。文档中有写吗?还有,你为什么说应用程序必须在前台?根据苹果公司的说法,即使应用程序被终止,一旦跨过区域边界,应用程序就会启动并收到通知。我正在用iOS模拟器的高速公路驾驶模拟测试它。我的代表从来没有接到过电话。。有什么想法吗?我已经设置了委托,CLLocationManager对象也被保留。。。