startMonitoringSignificantLocationChanges срабатывает, когда стационарно - PullRequest
3 голосов
/ 17 апреля 2019

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

Мой код менеджера местоположения следующий:

        locationManager = CLLocationManager()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestAlwaysAuthorization()
        locationManager.distanceFilter = 1500
        locationManager.startUpdatingLocation()
        locationManager.delegate = self
        locationManager.startMonitoringSignificantLocationChanges()
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.pausesLocationUpdatesAutomatically = false

, тогда мой didUpdateLocations

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location: CLLocation = locations.last!
        print("Location: \(location)")

        print("SIGNIFICANT CHANGE")

    }

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

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Поможет ли activityType?

Поскольку вы используете его для путешествий, вы, вероятно, можете игнорировать пешеходные или не автомобильные движения?

Если это не вариант, вы можете попробовать вычислить в didUpdateLocations точность горизонтальной / вертикальной развертки вашего объекта CLLocation.игнорировать, если оно не в пределах порога (это может привести к нескольким ложным отрицаниям)

1 голос
/ 17 апреля 2019

Вы не можете полагаться на startMonitoringSignificantLocationChanges(), чтобы дать вам последовательные результаты. Если вы идете в область с низкой плотностью вышек сотовой связи, расстояние, которое вы должны пройти, прежде чем оно сработает, снова изменится. Это метод определения местоположения с низким энергопотреблением и низкой надежностью.

Как говорится, это необычно для срабатывания, когда вы не двигались. Может быть, ваше устройство переключил сотовые вышки? Может быть, это ошибка. Подайте отчет, сделайте небольшой тестовый проект и отправьте его в Apple вместе с файлами журналов.

Я не знаю ваших требований, но одним из решений является сохранение (в переменной экземпляра и в виде файла) последнего найденного местоположения и сравнение расстояния между ним и новым местоположением, чтобы увидеть, действительно ли вы переместили длинный путь. Другой - использовать мониторинг региона.

...