我在处理Geofence
和用户当前位置时遇到问题。
当应用程序开始工作时,didUpdateLocations
称之为完美,我根据需要拥有用户位置。
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
但是,一旦didEnterRegion
代表被召集,
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {}
didUpdateLocations
将不再开火。他们在一起相关吗?
我也查了一下
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {}
在调用didEnterRegion
后状态没有改变。我还加了
locationManager?.startUpdatingLocation()
在didEnterRegion
但仍然没有被调用didUpdateLocations
。
有谁知道问题出在哪里?如何跟踪地区的位置?
PS:在调用EnterRegion时自动停止更新位置,并在调用ExitRegion时自动启动
更新:我使用xCode9,iOS 10,swift 4. EnterRegion
和ExitRegion
都是空的,我现在只打印一个日志,他们将来会发布一些数据到服务器。
didUpdateLocations将不再触发。他们在一起相关吗?
没有!见here
didChangeAuthorizationStatus
在这里毫无意义。授权保持不变。它刚被停止了。
正常跟踪不会对regionMonitoring产生任何影响。这是由操作系统管理的。
pausesLocationUpdatesAutomatically
设置为false
,默认为true
allowsBackgroundLocationUpdates
设置为true
。从它的链接:更新仅在应用程序暂停时停止,从而阻止应用程序被唤醒以处理这些事件。
我的猜测是,当您进入某个区域时,您的应用不再被暂停,并且可以再次开始跟踪,因此您必须确保您的应用不会被暂停。要跟踪你可以使用UIApplication.shared.backgroundTimeRemaining
。见this example
但说实话,我仍然认为你只是犯了一个简单的错误,并最终让你的locationTracking停止...