startMonitoringSignificantLocationChanges не работает в Swift

Я добавил CLLocationManager в свое приложение, используя Swift в файле AppDelegate.

В файле Appdelegate.swift

import CoreLocation
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {
var locationManager: CLLocationManager!

В методе didbecomeActive:

func applicationDidBecomeActive(application: UIApplication) {
    if((locationManager) != nil)
    {
        locationManager.stopMonitoringSignificantLocationChanges()
        locationManager.delegate = nil
        locationManager = nil
    }
    locationManager = CLLocationManager()
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.activityType = CLActivityType.OtherNavigation
    locationManager.requestAlwaysAuthorization()
    locationManager.startMonitoringSignificantLocationChanges()
}

Если я использую startUpdatingLocation, вызывается метод didUpdateLocations, но не для startMonitoringSignificantLocationChanges.

Почему его не вызывают на startMonitoringSignificantLocationChanges. Я тестирую это в симуляторе ios. Я не знаю, как зарегистрировать устройство.


person Nazik    schedule 15.12.2015    source источник
comment
возможный дубликат: stackoverflow.com/questions/8682683/   -  person adolfosrs    schedule 15.12.2015


Ответы (4)


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

Вам, вероятно, придется сесть на велосипед/автомобиль и проехать, ПО КРАЙНЕЙ МЕРЕ, несколько километров.

Однако вы можете использовать трюк, который вызовет значительное изменение местоположения:

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

введите описание изображения здесь

person michal.ciurus    schedule 15.12.2015
comment
Да, вам придется проехать несколько километров — достаточно, чтобы сменить вышку сотовой связи. - person michal.ciurus; 15.12.2015
comment
не забудьте спамить эту кнопку самолета :D Это должно произойти после пары переключений. - person michal.ciurus; 15.12.2015
comment
Большое спасибо .. спас мне жизнь - person Rathna Kumaran; 02.05.2017
comment
Спасатель - круто! - person nurider; 10.05.2017

В симуляторе перейдите в Debug->Location->Custom и измените местоположение, а затем протестируйте его.

person Rujoota Shah    schedule 02.05.2016

В симуляторе выберите Функции > Местоположение > Автострада.

Подождите немного, пока startMonitoringSignificantLocationChanges не активирует didUpdateLocations.

person Riajur Rahman    schedule 15.08.2020

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

person Samira    schedule 08.04.2020