0

I am using CLLocationManager for getting user location. I need to update user location when they move. I am using this code :

import UIKit

import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    private var locationManager = CLLocationManager()
    lazy var locations = [CLLocation]()
    var op:String = ""
    @IBOutlet weak var resultTxt: UITextView!

    @IBAction func Start(sender: AnyObject) {
        startLocationManager()
        showResult()
    }
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func startLocationManager(){
        locationManager.delegate = self
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.distanceFilter = kCLDistanceFilterNone
        locationManager.pausesLocationUpdatesAutomatically = false
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()
    }

    func startLocationTracking() {
        NSLog("startLocationTracking")
        if CLLocationManager.locationServicesEnabled() {
            switch(CLLocationManager.authorizationStatus()) {
            case .NotDetermined, .Restricted, .Denied:
                print("No access")
                self.startLocationManager()
            case .AuthorizedAlways, .AuthorizedWhenInUse:
                NSLog("authorizationStatus authorized")
            }
        } else {
            print("Location services are not enabled")
            self.startLocationManager()
        }
    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        for location in locations {
            let howRecent = location.timestamp.timeIntervalSinceNow

            if abs(howRecent) < 10 && location.horizontalAccuracy < 20 {
                //update distance
                self.locations.append(location)
                showResult()
            }
        }
    }

    func showResult(){
        let currentDate = NSDate()
        let res:String = "Result LAT : \(self.locations.last?.coordinate.latitude) AND LNG : \(self.locations.last?.coordinate.longitude)  Time : \(currentDate.toShortTimeString()) \n "
        op += res
        self.resultTxt.text = op
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

And I have already added NSLocationAlwaysUsageDescription and NSLocationWhenInUseUsageDescription in .plist. This code works fine for the first time. But when the user moves "didUpdateLocations" is not getting fired. Can any one please help me, what I am doing wrong?

hardillb
  • 54,545
  • 11
  • 67
  • 105
Rupshikha
  • 213
  • 1
  • 3
  • 16

1 Answers1

0

Try to add these lines, to be able to monitoring significant location changes when user moves:

locationManager.startMonitoringSignificantLocationChanges()
locationManager.distanceFilter = 300 //value is up to you
Evgeny Karkan
  • 8,782
  • 2
  • 32
  • 38