2016-05-03 10 views
0

Ich habe zwei Standorte ist der Fahrer und andere ist der Fahrer.Ich habe lat n lange für beide verfügbar.Ich möchte eine API treffen, wenn der Fahrer in den Geofence-Bereich eintritt des Fahrers Standort.So implementieren Sie Geofencing-Code für Apple-Karte IOS 9

Ich ging durch QKGeofenceManager Demo-Projekt: mit dieser kann ich bieten lat n lang und den Radius Geofence zu finden.

Aber das Problem ist, muss ich Treiberstandort jedes Mal im Hintergrund aktualisieren und welche Bedingung sollte angewendet werden, so dass der Rückruf erfolgt, wenn der Fahrer den Bereich Geofence des Fahrers betritt.Wenn die ap im Hintergrund ist, wie wird es Alles handhaben. Muss ich irgendwelche Änderungen in AppDelegate machen müssen

- (NSArray *)geofencesForGeofenceManager:(QKGeofenceManager *)geofenceManager 
{ 
    NSArray *fetchedObjects = [self.fetchedResultsController fetchedObjects]; 
    NSMutableArray *geofences = [NSMutableArray arrayWithCapacity:[fetchedObjects count]]; 
    for (NSManagedObject *object in fetchedObjects) { 
     NSString *identifier = [object valueForKey:@"identifier"]; 
     CLLocationDegrees lat = [[object valueForKey:@"lat"] doubleValue]; 
     CLLocationDegrees lon = [[object valueForKey:@"lon"] doubleValue]; 
     CLLocationDistance radius = [[object valueForKey:@"radius"] doubleValue]; 
     CLLocationCoordinate2D center = CLLocationCoordinate2DMake(lat, lon); 
     CLCircularRegion *geofence = [[CLCircularRegion alloc] initWithCenter:center radius:radius identifier:identifier]; 
     [geofences addObject:geofence]; 
    } 
    return geofences; 
} 
+0

Wenn Sie die zu überwachende Geofence-Region eingerichtet haben, erhalten Sie einen Aufruf an Ihren 'didEnterRegion'-Delegaten-Callback, auch wenn sich Ihre App im Hintergrund befindet – Paulw11

+0

@ Paulw11 wo müssen Sie diese Methoden aufrufen, In appdelegate oder in der Klasse, wo ich die Standorte habe –

Antwort

0

ich eine Alternative, diese Aufgabe zu erreichen gefunden. Da meine Delegiertenmethode von Didenterlocation nicht aufgerufen wurde, wendete ich einen anderen Ansatz an.

- (void)locationManager:(CLLocationManager *)manager 

    didUpdateLocations:(NSArray *)locations { 

    // If it's a relatively recent event, turn off updates to save power 
    NSLog(@"%@ locations",locations); 

    float Lat = _locationManager.location.coordinate.latitude; 
    float Long = _locationManager.location.coordinate.longitude; 

    NSLog(@"Lat : %f Long : %f",Lat,Long); 

    CLLocationCoordinate2D center = CLLocationCoordinate2DMake(28.58171,77.2915457); 

    NSLog(@"center check %@",center); 
    CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center 
                   radius:500 
                  identifier:@"new region"]; 
    BOOL doesItContainMyPoint = [region containsCoordinate:CLLocationCoordinate2DMake(Lat,Long)]; 

    NSLog(@"success %hhd", doesItContainMyPoint); 

} 

durch den Überblick über den aktuellen Standort zu halten, wann immer die aktuellen Ortskoordinaten in die Koordinaten des Mittelbereichs eingeben, können Sie eine Meldung ausgelöst, dass der Benutzer diese bestimmte Region eingetreten ist.