Получать обновления местоположения в фоновом режиме — только для смены страны iOS

Каков наилучший способ в основном местоположении получать обновления фонового местоположения только при изменении страны?


person Kalai    schedule 06.08.2018    source источник
comment
Вы можете создать геозону страны и поймать ее в didEnterRegion   -  person Quoc Nguyen    schedule 06.08.2018
comment
Это может быть любая страна, как мне добиться в этом случае?   -  person Kalai    schedule 06.08.2018
comment
Если у вас нет данных об этом, я думаю, вы можете проверять страну только каждый раз, когда менеджер местоположения обновляет новые данные о местоположении. stackoverflow.com/questions/8534496 /.   -  person Quoc Nguyen    schedule 06.08.2018


Ответы (2)


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

func locationManager(_ manager: CLLocationManager, didUpdateLocations objects: [CLLocation]) {
    let location = objects.last!
    let geocoder = CLGeocoder()
    geocoder.reverseGeocodeLocation(location!) { (places, error) in
            if(error == nil){
                if(places != nil){
                    let place: CLPlacemark = places![0]
                    let country = place.country
                    // do something if its changed

                }
            } else {
                //handle error
            }

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

person Steve O'Connor    schedule 06.08.2018

То, что вы ищете, называется геозона, об этом есть отличные статьи. В любом случае вам нужно будет реализовать такие функции, как

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) (CLLocationManagerDelegate)

func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) (CLLocationManagerDelegate)

open func requestAlwaysAuthorization() (CLLocationManager)

func startMonitoring(for region: CLRegion) (CLLocationManager)

person Martin Prusa    schedule 06.08.2018