仅当国家/地区发生变化时,核心位置获取后台位置更新的最佳方式是什么?
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
两者都将减少位置更新使用的电量。
您正在寻找的是所谓的地理围栏,有很多关于它的文章。您需要以任何方式实现功能,例如
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)