Ich versuche Region Überwachung zu testen, für die ich bin immer aktuelle Lage wie folgt aus:Region aktuellen Standort Überwachung benachrichtigen nicht an der Ausfahrt
- (void)startLocationTracking
{
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
// Start location manager
if ([CLLocationManager locationServicesEnabled] && [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized) {
locationManager = [LocationTracker sharedLocationManager];
locationManager.delegate = self;
[locationManager startMonitoringSignificantLocationChanges];
}
}
Und erste Lage mit Region Überwachung wie diese Tracking:
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:manager.location.coordinate radius:300 identifier:@"first location initializer"];
NSLog(@"0: %@", manager.location);
NSLog(@"1: %@", region);
[manager startMonitoringForRegion:region];
NSLog(@"[locationManager startMonitoringForRegion:%@];", region);
});
}
Dann in jeder Ausfahrt aus der aktuellen Region ich überwache die neue Position wie folgt aus:
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
NSLog(@"%s, %@", __PRETTY_FUNCTION__, region);
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
NSLog(@"%s, %@", __PRETTY_FUNCTION__, region);
NSArray *allRegions = manager.monitoredRegions.allObjects;
if (allRegions.count > 0) {
for (CLRegion *reg in allRegions) {
[manager stopMonitoringForRegion:reg];
}
}
CLLocationCoordinate2D cord = CLLocationCoordinate2DMake(manager.location.coordinate.latitude, manager.location.coordinate.longitude);
CLRegion *regionNew = [[CLRegion alloc] initCircularRegionWithCenter:cord radius:300 identifier:@"new region"];
NSLog(@"region: %@", region);
NSLog(@"regionNew: %@", regionNew);
[manager startMonitoringForRegion:regionNew];
}
Ich erkläre, was ich erwarte:
- Registrieren Sie den aktuellen Standort in der Region Überwachung.
- Benutzer benachrichtigen aktuellen Bereich verlassen.
- Beim Beenden des Protokolls und registrieren Sie erneut den aktuellen Standort als Region.
Dies passiert nicht.
Wo liege ich falsch?
Ich versuchte auf Simulator mit "Freeway Drive".
UPDATE:
Geprüft und Arbeit, wegen Apple-Bug in Geofencing wird app unterstützen nur 7.1+, ziemlich schlecht, aber ich habe nicht eine andere Idee.
Nun, Sie sollten diese Art von Verhalten nie auf einem Simulator testen. Sie benötigen dafür ein echtes Gerät. Ich habe versucht, dies einmal für eine Location-Tracker-App, aber es wurde einfach zufällig auf einem Simulator ab. –
Getestet in Echtzeit, funktioniert immer noch nicht. –
Können Sie Ihr Update näher erläutern? Funktioniert Ihr Code in Ihrer Frage jetzt ohne die in der Antwort angegebene Lösung? – rene