在后台获取位置更新-仅适用于国家/地区更改iOS

时间:2018-08-06 08:02:59

标签: ios swift core-location background-mode

只有在国家/地区发生变化时,在核心位置获取后台位置更新的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用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之类的东西,这两种方法都会减少位置更新所消耗的电量。

答案 1 :(得分:0)

您要寻找的是 geofencing ,其中有很多不错的文章。您需要以任何方式实现类似

的功能

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)