stopRangingBeaconsInRegion可能会停止监视区域的通知?

我正在做一个与CLLocationManager工作的示例项目。

我打电话给startMonitoringForRegion 。 然后,我开始用其他设备模拟一个信标,并didEnterRegion

didEnterRegion ,我调用startRangingBeaconsInRegion并正常工作。

然后,我暂停信标发射器和didExitRegion被调用。 在didExitRegion我调用stopRangingBeaconsInRegion

如果我再次启动信标发射器, didEnterRegion不会被调用。

我在Apple文档中find了这个:

stopRangingBeaconsInRegion:停止指定信标区域的通知传递。

stopRangingBeaconsInRegion可能会停止监视区域的通知?

我尝试没有stopRangingBeaconsInRegion相同,工作正常。

谢谢

添加更多信息:

 NSUUID *UUID = [[NSUUID alloc] initWithUUIDString:@"77777777-1717-2727-7777-777777777777"]; NSString *identifier = @"MyBeaconRegion"; CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:UUID identifier:identifier]; [_locationManager startMonitoringForRegion:region]; - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { NSLog(@"didEnterRegion"); [_locationManager startRangingBeaconsInRegion:(CLBeaconRegion*)region]; NSLog(@"StartRangingBeacons"); } - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { NSLog(@"didExitRegion"); [_locationManager stopRangingBeaconsInRegion:(CLBeaconRegion*)region]; NSLog(@"StopRangingBeacons"); } - (void)locationManager:manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { for (CLBeacon *beacon in beacons) { NSLog(@"Ranging Beacon: %@ and proximity: %f", beacon.proximityUUID.UUIDString, beacon.accuracy); } } 

还有一些日志:

 2015-01-13 09:46:30.559 RegionMonitoring[188:5314] didEnterRegion 2015-01-13 09:46:30.561 RegionMonitoring[188:5314] StartRangingBeacons 2015-01-13 09:46:31.579 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.008799 2015-01-13 09:46:32.575 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.011362 2015-01-13 09:46:33.580 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.012814 2015-01-13 09:46:34.580 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.012909 2015-01-13 09:46:35.579 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.012915 2015-01-13 09:46:36.579 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.011501 2015-01-13 09:46:37.576 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.010177 2015-01-13 09:46:38.576 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.013618 2015-01-13 09:46:39.578 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 09:46:40.573 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 09:46:41.578 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 09:46:42.575 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 09:46:43.578 RegionMonitoring[188:5314] didExitRegion 2015-01-13 09:46:43.579 RegionMonitoring[188:5314] StopRangingBeacons 2015-01-13 09:46:43.581 RegionMonitoring[188:5314] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 

然后,我打开灯塔,没有任何反应。

如果我尝试这个代码:

 - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { NSLog(@"didExitRegion"); //[_locationManager stopRangingBeaconsInRegion:(CLBeaconRegion*)region]; //NSLog(@"StopRangingBeacons"); } 

工作正常:

 2015-01-13 10:15:45.945 RegionMonitoring[364:11017] didEnterRegion 2015-01-13 10:15:45.947 RegionMonitoring[364:11017] StartRangingBeacons 2015-01-13 10:15:46.960 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.040842 2015-01-13 10:15:47.960 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.040842 2015-01-13 10:15:48.961 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.040842 2015-01-13 10:15:49.958 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.040842 2015-01-13 10:15:50.960 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:15:51.958 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:15:52.960 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:15:53.956 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:15:54.960 RegionMonitoring[364:11017] didExitRegion 2015-01-13 10:15:54.962 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:15:55.955 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:15:56.960 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:15:57.959 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:16:02.960 RegionMonitoring[364:11017] didEnterRegion 2015-01-13 10:16:02.962 RegionMonitoring[364:11017] StartRangingBeacons 2015-01-13 10:16:02.963 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.040842 2015-01-13 10:16:02.971 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.040842 2015-01-13 10:16:03.979 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.040842 2015-01-13 10:16:04.979 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.036694 2015-01-13 10:16:05.978 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: 0.036051 2015-01-13 10:16:06.977 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:16:07.977 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:16:08.974 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:16:09.977 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:16:10.973 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:16:11.977 RegionMonitoring[364:11017] didExitRegion 2015-01-13 10:16:11.978 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:16:12.974 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 2015-01-13 10:16:13.977 RegionMonitoring[364:11017] Ranging Beacon: 77777777-1717-2727-7777-777777777777 and proximity: -1.000000 

代码看起来正确。 我怀疑发生了什么事情,你只是看到一个新的检测延迟后停止测距。 如果您等待15分钟,您是否看到第二区域进入事件?

在前台测距绝对可以加快信标检测的速度,因为它告诉操作系统做恒定的蓝牙扫描来寻找信标。 测距导致检测在几秒钟内发生。 如果没有测距,iOS会使用15分钟的扫描周期来查找信标,iPhone 5+上的蓝牙硬件filter可能会加速信标。 硬件filter不是100%可靠的,所以无论如何,一次检测的延迟时间最多可延迟15分钟。

详情请看这里: http : //developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html

如果应用程序在区域内启动,则每个startMonitoringForRegion不会调用didEnterRegion ,“ didEnterRegion是一个阈值事件,当input一个区域时触发。想一想:一个事件表明您在一个区域内会持续激发。 也许它没有触发的原因是因为当你调用startRangingBeaconsInRegion你已经在这个区域了,所以没有调用didEnterRegion