Shangari C
Shangari C

Reputation: 772

Location Update Issue iOS

I know there is a lot of questions related to that,But I cant able to link with my Issue. In my app,I am fetching the Nearby Restaurant,Initially,If user clicks on 'Nearby' button I fetch the lat,long,placemark details,Using this code below.

-(void)setUpUserLocation
{
    BOOL locationAllowed = [CLLocationManager locationServicesEnabled];
   if (locationAllowed==NO)
    {
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"No authorization"
        message:@"Please, enable access to your location"
        delegate:self cancelButtonTitle:@"Cancel"
        otherButtonTitles:@"Open Settings", nil];
        [alertView show];
    }
    else
    {
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;

        if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
            [locationManager requestWhenInUseAuthorization];
        }
    }
    [locationManager startUpdatingLocation];
}


-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *location=[locations lastObject];
    CLGeocoder *geocoder=[[CLGeocoder alloc]init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
        CLPlacemark *placemark = placemarks[0];
        NSDictionary *addressDictionary = [placemark addressDictionary];

    }];
    [self stopSignificantChangesUpdates];

}
- (void)stopSignificantChangesUpdates
{
    [locationManager stopUpdatingLocation];
    locationManager = nil;
}

My Question is, If the user location changes, how do I give the user an alert like Your location changed, you need to update it then only you can get a Nearby Restaurant Location popup should come once the user location changes otherwise don't want to call the didUpdateLocation everytime. I called startMonitoringSignificantLocationChanges then it did not called the didUpdateLocation in first time itself.Any Help on this.

Upvotes: 0

Views: 416

Answers (1)

TheHungryCub
TheHungryCub

Reputation: 1970

check after some time or check after user's movement(whatever you want),if condition is true then call service...

I think it help you;

Step 1

 (void)viewDidLoad {
[super viewDidLoad];

locationManager = [[CLLocationManager alloc] init];
//set the amount of metres travelled before location update is made
[locationManager setDistanceFilter:100];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];

[locationManager requestAlwaysAuthorization]; 

// call the timer with 5 minutes cap using 5 * 60 = 300
[NSTimer scheduledTimerWithTimeInterval:300.0f target:self selector:@selector(sendlocation1) userInfo:nil repeats:YES];

Step 2

Every 100 Meter change Device This Method is called :

-(void)locationManager:(CLLocationManager *)manager
   didUpdateToLocation:(CLLocation *)newLocation
          fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"%f",newLocation.coordinate.latitude);

    NSLog(@"%f",newLocation.coordinate.longitude);
    CLLocationDistance meters = [newLocation distanceFromLocation:oldLocation];
         if(meters >=100)
      {
         // call webservice for location is updated 
         [self sendlocation1];
      }else
      {
       // call normal method
       }
    }

Upvotes: 2

Related Questions