startMonitoringSignificantLocationChanges () не работает на физическом устройстве - PullRequest
0 голосов
/ 16 октября 2018

У меня проблема с отображением местоположения на физическом устройстве, когда locationManager установлен на startMonitoringSignificantLocationChanges().

Все работает в симуляторе, но когда я запускаю его на моем iPhone, координаты не возвращаются, и если яизмените его на startUpdatingLocation(), это работает на моем физическом устройстве.

Есть идеи, что может быть не так?

Мой код:

  let locationManager = CLLocationManager()
    override func viewDidLoad() {
        super.viewDidLoad()

        startReceivingSingificantLocationChanges()
    }

    func startReceivingSingificantLocationChanges() {

        if !CLLocationManager.significantLocationChangeMonitoringAvailable() {
            //the service is not available
            print("Service is not available")
            return
        }

        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.startMonitoringSignificantLocationChanges()
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.first{
            print(location.coordinate)
            coordinatesLbl.text = "LAT:\(location.coordinate.latitude) LONG:\(location.coordinate.longitude)"
        }
    }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        if status == CLAuthorizationStatus.denied{
            showLocationDisabledPopUp()
            print("didChangeAuthorization")
        }
    }

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Я пробовал это и имел ту же проблему.Я закончил тем, что установил местоположение desiredAccuracy в kCLLocationAccuracyKilometer.Это имело желаемый эффект, давая мне значительные изменения местоположения.Другой способ сделать это - использовать startUpdatingLocation, и, как только у вас будет текущее местоположение, измените менеджер местоположения на startMonitoringSignificantLocationChanges.

0 голосов
/ 16 октября 2018

Документация на startMonitoringSignificantLocationChanges() гласит:

Приложения могут ожидать уведомления, как только устройство переместится на 500 метров или более от его предыдущего уведомления.Не следует ожидать уведомлений чаще, чем раз в пять минут.Если устройство способно извлекать данные из сети, менеджер местоположения с большей вероятностью будет своевременно доставлять уведомления.

Поэтому при использовании этого метода не следует ожидать их очень часто.

startUpdatingLocation обновляется гораздо чаще, поэтому это работает.

...