быстрое расположение пользователя - обновить, если переместить - PullRequest
0 голосов
/ 21 февраля 2020

Таким образом, я смог получить местоположение пользователей с помощью следующего кода.

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
      if status != .authorizedWhenInUse {return}
    print("test LOCATION BELOW")
      locationManager.desiredAccuracy = kCLLocationAccuracyBest
      locationManager.startUpdatingLocation()
      let locValue: CLLocationCoordinate2D = manager.location!.coordinate

        print("UUID: \(String(describing: uuid)) locations = \(locValue.latitude) \(locValue.longitude)")

  }

Однако я хочу посмотреть местоположение пользователей и, если они перемещаются, обновить их местоположение.

I мне интересно, как я могу получить этот код для проверки местоположения пользователей?

Мой

override func viewDidLoad(){
  locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.requestAlwaysAuthorization()}

Я получаю сообщение, подтверждающее запрос, и подтверждаю его, но он не запускает код

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Вот как вы можете получить данные о местоположении. Код похож на ваш, но с небольшими изменениями и дополнениями.

Сначала проверьте, есть ли у вас разрешение пользователя на получение данных о его местоположении.

    func isLocationServicesEnabled() -> Bool {
        if CLLocationManager.locationServicesEnabled() {
            switch(CLLocationManager.authorizationStatus()) {
            case .notDetermined, .restricted, .denied:
                return false
            case .authorizedAlways, .authorizedWhenInUse:
                return true
            @unknown default:
                return false
            }
        }

        return false
    }

Если этот метод возвращает false, вы может запросить авторизацию.

// Initialize manager in your viewDidLoad
override func viewDidLoad() {
   super.viewDidLoad()

   locationManager = CLLocationManager()
   locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
   locationManager.delegate = self
   // Do other stuff
}


override func viewDidAppear(_ animated: Bool) {
   super.viewDidAppear(animated)
   // Check for auth
   if isLocationServicesEnabled() {
      locationManager.startUpdatingLocation()
   } else {
      locationManager.requestWhenInUseAuthorization()
   }
   // Do other stuff
}

Наконец, в вашей реализации CLLocationManagerDelegate получите координаты.

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
     guard let location = locations.last?.coordinate else { return }
     // Use location.latitude and location.longitude here
     // If you don't want to receive any more location data then call
     locationManager.stopUpdatingLocation()
}
0 голосов
/ 21 февраля 2020

Во-первых, вы должны убедиться, что у вас есть разрешение пользователя на получение данных о его местонахождении

func checkLocationServicesAuthorization() -> Bool {

         if CLLocationManager.locationServicesEnabled() {

            switch CLLocationManager.authorizationStatus() {
            case .notDetermined:

                 return false

            case .restricted, .denied:

             //code for open settings screen in user’s phone

                 return false

            case .authorizedWhenInUse, .authorizedAlways:

                 return true

            default:

                 return false

            }
        } else {

             //code for open settings screen in user’s phone

        }
        return false
    }

И

override func viewDidLoad() {

   super.viewDidLoad()

   locationManager = CLLocationManager()
   locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
   locationManager.delegate = self

}


override func viewDidAppear(_ animated: Bool) {

   super.viewDidAppear(animated)

   if checkLocationServicesAuthorization() {

      locationManager.startUpdatingLocation()

   } else {

      locationManager.requestWhenInUseAuthorization()
   }

}

Вы можете использовать метод делегата didUpdateLocations из CLLocationManagerDelegate и не забыли подключить делегата yourLocationManager.delegate = self

 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            let userLocation:CLLocation = locations[0] as CLLocation

            // Call stopUpdatingLocation() to stop listening for location updates, other wise this function will be called every time when user location changes.
            // yourLocationManager.stopUpdatingLocation()
            guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }

            let latitude = String.init(userLocation.coordinate.latitude)
            let longitude = String.init(userLocation.coordinate.longitude) 

            print("\(latitude), \(longitude)")

}
...