locationManager:didExitRegion: 传输停止时触发延迟大
locationManager:didExitRegion: a big delay of firing when transmitting is stopped
我正在开发监视 CLBeaconRegion 并在用户 enter/exits 区域时向用户显示本地通知的应用程序。一切正常,但在测试时我发现如果我进入区域,收到 locationManager:didEnterRegion: 的呼叫,然后关闭发射信标,我只在大约 2 分钟内收到 locationManager:didExitRegion: 的呼叫。
任何人都可以帮助避免这种延迟吗?
发送设备iPhone 4s iOS 8.3。接收设备是iPhone 4s with iOS 7.1.2
- (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
回调。 一个didExitRegion
回调可能需要15分3秒。
为什么?因为 4S 仅在后台每 15 分钟扫描一次信标以节省电量。只有在 3 秒内没有看到信标后,您才会收到 didExitRegion
事件。
详情请看这里:http://developer.radiusnetworks.com/2014/03/12/ios7-1-background-detection-times.html
编辑: 通过在启用监控的同时启用测距,您可以使设备在前台更快地检测到。只需在调用 startMonitoringBeaconsInRegion:
后调用 startRangingBeaconsInRegion:
较新的 iOS 设备 iPhone 5+ 具有硬件辅助功能,可以在不测距时在后台和前台持续扫描,但此辅助功能的插槽是有限的。只有前 30 个注册区域可以访问此快速背景检测,并且 4S 上没有此功能。
我正在开发监视 CLBeaconRegion 并在用户 enter/exits 区域时向用户显示本地通知的应用程序。一切正常,但在测试时我发现如果我进入区域,收到 locationManager:didEnterRegion: 的呼叫,然后关闭发射信标,我只在大约 2 分钟内收到 locationManager:didExitRegion: 的呼叫。
任何人都可以帮助避免这种延迟吗?
发送设备iPhone 4s iOS 8.3。接收设备是iPhone 4s with iOS 7.1.2
- (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
回调。 一个didExitRegion
回调可能需要15分3秒。
为什么?因为 4S 仅在后台每 15 分钟扫描一次信标以节省电量。只有在 3 秒内没有看到信标后,您才会收到 didExitRegion
事件。
详情请看这里:http://developer.radiusnetworks.com/2014/03/12/ios7-1-background-detection-times.html
编辑: 通过在启用监控的同时启用测距,您可以使设备在前台更快地检测到。只需在调用 startMonitoringBeaconsInRegion:
startRangingBeaconsInRegion:
较新的 iOS 设备 iPhone 5+ 具有硬件辅助功能,可以在不测距时在后台和前台持续扫描,但此辅助功能的插槽是有限的。只有前 30 个注册区域可以访问此快速背景检测,并且 4S 上没有此功能。