我在这里看到很多答案,说你可以。有人说你可以,但你必须将它包装在backgroundTask中,我发现它是冗余的,因为它已经包含在plist中。其他人说你做不到,必须选择其他选择。
然而,Apple文档说:
阅读locationManagerDidPauseLocationUpdates
您可以使用此方法的实现来启动区域 监控用户的当前位置或启用访问 位置服务,以确定用户何时再次开始移动。 另一种方法是立即使用a重新启动位置服务 精度降低(可以节省电力),然后返回更大 仅在用户再次开始移动后才准确。
我在locationManagerDidPauseLocationUpdates
回调中尝试了重启位置:
locationManager.stopUpdatingLocation()
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.distanceFilter = 200
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.allowsBackgroundLocationUpdates = true
self.locationManager.startUpdatingLocation()
但它不起作用。我再也没有找到locationUpdates了!
我也尝试将它包装在backgroundTask中,如下所示:
var changeLocationTrackingType:UIBackgroundTaskIdentifier?
func changeLocationTrackingInBackground()
{
dispatch_async(dispatch_get_main_queue()){ [unowned self] in
self.changeLocationTrackingType = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in
self.changeLocationTrackingType = UIBackgroundTaskInvalid
})
locationManager.stopUpdatingLocation()
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.distanceFilter = 200
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.allowsBackgroundLocationUpdates = true
self.locationManager.startUpdatingLocation()
}
}
FWIW我不是在谈论创建一个地区,也不是在谈论重要的位置跟踪。我正在谈论在您或系统停止您的locationTracking之后开始startLocationUpdate
。
大多数答案建议你使用计时器来改变准确性,但我纯粹想要停下来并能够重新开始。反正有没有这样做?
另外,我知道当你想startLocationUpdate
时,你必须处于活跃的runloop状态,只是不确定如何可以保证这一点。