我在处理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()
<{1>}中的但仍未调用didEnterRegion
。
有谁知道问题出在哪里? 如何跟踪地区的位置?
PS:在调用EnterRegion时自动停止更新位置,并在调用ExitRegion时自动启动
更新:我使用xCode9,iOS 10,swift 4. didUpdateLocations
和EnterRegion
都是空的,我现在只打印一个日志,它们是将来会将一些数据发布到服务器上。
答案 0 :(得分:2)
didUpdateLocations将不再触发。他们有关系吗? 一起?
不!请参阅here
didChangeAuthorizationStatus
在这里毫无意义。授权保持不变。它刚被停止了。
正常跟踪不会对regionMonitoring产生任何影响。这是由操作系统管理的。
因此,由于后台时间过长,您的正常跟踪可能已停止。为避免将pausesLocationUpdatesAutomatically
设置为false
,默认设置为true
还要确保allowsBackgroundLocationUpdates
设置为true
。从其链接:
更新仅在应用暂停时停止,从而阻止了 应用程序被唤醒以处理这些事件。
我的猜测是,当您进入某个区域时,您的应用不再被停用,并且可以再次开始跟踪,因此您必须确保您的应用不会被暂停。要跟踪您可以使用UIApplication.shared.backgroundTimeRemaining
。见this example
但说实话,我仍然认为你只是犯了一个简单的错误,不知何故最终让你的locationTracking停止了......