locationManager:didExitRegion:停止传输时发射的大延迟

时间:2015-04-28 09:50:58

标签: ios iphone cllocationmanager ibeacon

我正在处理监控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));
}

谢谢!

1 个答案:

答案 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上不可用。