Ios 位置管理器:DIDEXITREON区域:当传输停止时,发射延迟很大
我正在开发一个应用程序,它可以监控CLBeaconRegion,并在用户进入/退出该区域时向用户提供本地通知。一切正常,但在测试过程中,我发现如果我进入区域,会接到locationManager:didEnterRegion:的呼叫,然后关闭发射信标,我会在大约2分钟内接到locationManager:didExitRegion:的呼叫 有谁能帮忙避免这次延误吗 传输设备是iPhone4S和iOS 8.3。接收设备为iPhone 4s和iOS 7.1.2Ios 位置管理器:DIDEXITREON区域:当传输停止时,发射延迟很大,ios,iphone,cllocationmanager,ibeacon,Ios,Iphone,Cllocationmanager,Ibeacon,我正在开发一个应用程序,它可以监控CLBeaconRegion,并在用户进入/退出该区域时向用户提供本地通知。一切正常,但在测试过程中,我发现如果我进入区域,会接到locationManager:didEnterRegion:的呼叫,然后关闭发射信标,我会在大约2分钟内接到locationManager:didExitRegion:的呼叫 有谁能帮忙避免这次延误吗 传输设备是iPhone4S和iOS 8.3。接收设备为iPhone 4s和iOS 7.1.2 - (BOOL)application
- (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));
}
谢谢大家! 当应用程序位于4S上的后台时(或者如果它位于前台且不在范围内),可能需要15分钟才能获得
didEnterRegion
回调AdidExitRegion
回调可能需要15分3秒。
为什么??因为4S在后台每15分钟只扫描一次信标,以节省电池。只有在没有看到信标的3秒钟后,您才会得到一个didExitRegion
事件
详情请参见此处:
编辑:通过在启用监控的同时启用测距功能,您可以让设备在前台更快地进行检测。在调用startMonitoringBeaConsincinRegion:
后,只需调用startTransingBeaConsincinRegion:
较新的iOS设备iPhone 5+具有硬件辅助功能,在不测距时可在后台和前台持续扫描,但此辅助功能的插槽有限。只有前30个注册区域可以访问此快速背景检测,同样,这在4S上不可用。但应用程序正在前台运行以进行测试。请参阅我编辑的答案。如果您正在监视但未测距,则该问题也适用于前景。