Il est possible que stopRangingBeaconsInRegion arrête les notifications d'une région surveillée?

Je fais un exemple de projet en travaillant avec CLLocationManager .

J'appelle startMonitoringForRegion . Ensuite, je commence à simuler une balise avec un autre périphérique et on appelle didEnterRegion .

Dans le didEnterRegion , j'appelle startRangingBeaconsInRegion et fonctionne bien.

Ensuite, je mets en pause l'émetteur de la balise et didExitRegion est appelé. Dans la section didExitRegion j'appelle stopRangingBeaconsInRegion .

Si je relance l'émetteur de la balise, didEnterRegion n'est pas appelé.

Je l'ai trouvé dans la documentation Apple:

stopRangingBeaconsInRegion: arrête la remise des notifications pour la région de balise spécifiée.

Il est possible que stopRangingBeaconsInRegion arrête les notifications d'une région surveillée?

J'essaye la même chose sans le stopRangingBeaconsInRegion et fonctionne bien.

Merci

Ajouter plus d'informations:

 NSUUID *UUID = [[NSUUID alloc] initWithUUIDSsortingng:@"77777777-1717-2727-7777-777777777777"]; NSSsortingng *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.UUIDSsortingng, beacon.accuracy); } } 

Et quelques logs:

 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 

Ensuite, j'allume la balise et rien ne se passe.

Si j'essaye avec ce code:

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

Fonctionne bien:

 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 

Le code semble correct. Je soupçonne que ce qui se passe est que vous voyez simplement un retard sur une nouvelle détection après que vous arrêtez la télémésortinge. Si vous attendez 15 minutes, voyez-vous l'événement d'input de la deuxième région?

Allant au premier plan accélère absolument les détections de balises, car il dit à l'OS de faire comme un balayage Bluetooth constant pour searchr des balises. La télémésortinge provoque des détections dans quelques secondes. Si ce n'est pas le cas, iOS utilise un cycle d'parsing de 15 minutes pour searchr des balises, qui peuvent être accélérées par les filters matériels bluetooth sur l'iPhone 5+. Les filters matériels ne sont pas fiables à 100% donc les détections sont parfois retardées jusqu'à 15 minutes.

Voir ici pour plus de détails: http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html

Par startMonitoringForRegion n'appelle pas didEnterRegion si l'application est démarrée dans la région , " didEnterRegion est un événement de seuil, déclenché lors de la didEnterRegion une didEnterRegion y: un événement signalant que vous êtes dans une région se triggersrait continuellement." Peut-être que la raison pour laquelle il ne tire pas est parce que quand vous appelez startRangingBeaconsInRegion vous êtes déjà dans la région et didEnterRegion n'est pas appelé.