我正在处理监控CLBeaconRegion的应用程序,并在用户进入/退出区域时向用户显示本地通知。一切正常,但测试时我发现如果我进入区域,调用了locationManager:didEnterRegion:然后关闭发送信标,我调用了locationManager:didExitRegion:仅在大约2分钟内。
有人可以帮助避免这种延迟吗?
传输设备是带有iOS 8.3的iPhone 4s。接收设备是带有iOS 7.1.2的iPhone 4s
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[self.locationManager requestAlwaysAuthorization];
}
[self.locationManager startMonitoringForRegion:beaconRegion];
...
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
谢谢!
答案 0 :(得分:4)
当应用程序在4S的后台(或者如果它位于前台而不是范围内)时,最多可能需要15分钟才能获得didEnterRegion
回调。 didExitRegion
回调可能需要15分3秒。
为什么呢?因为4S仅在后台每15分钟扫描一次信标以节省电量。只有在没有看到灯塔的3秒后,您才会收到didExitRegion
事件。
详情请见此处:http://developer.radiusnetworks.com/2014/03/12/ios7-1-background-detection-times.html
编辑:您可以通过启用与启用监控相同的范围来更快地在前台检测设备。致电startRangingBeaconsInRegion:
startMonitoringBeaconsInRegion:
较新的iOS设备iPhone 5+具有硬件辅助功能,可以在不进行测距时在后台和前台不断扫描,但此辅助功能的插槽有限。只有前30个注册区域可以访问这种快速背景检测,而且这在4S上不可用。