调用didEnterRegion时,不再调用didUpdateLocations

问题描述 投票:2回答:1

我在处理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. EnterRegionExitRegion都是空的,我现在只打印一个日志,他们将来会发布一些数据到服务器。

ios swift core-location geofencing region-monitoring
1个回答
2
投票

didUpdateLocations将不再触发。他们在一起相关吗?

没有!见here

didChangeAuthorizationStatus在这里毫无意义。授权保持不变。它刚被停止了。

正常跟踪不会对regionMonitoring产生任何影响。这是由操作系统管理的。

更新仅在应用程序暂停时停止,从而阻止应用程序被唤醒以处理这些事件。

我的猜测是,当您进入某个区域时,您的应用不再被暂停,并且可以再次开始跟踪,因此您必须确保您的应用不会被暂停。要跟踪你可以使用UIApplication.shared.backgroundTimeRemaining。见this example

  • 避免使用模拟器进行测试。由于应用程序生命周期有点搞砸了。见this post from an Apple employee。你必须断开你的mac并使用logging,这样你才能拥有真正的体验
  • 确保你看到this question。它将向您介绍一些地理围栏限制,我不确定Apple从那以后有多少改进

但说实话,我仍然认为你只是犯了一个简单的错误,并最终让你的locationTracking停止...

© www.soinside.com 2019 - 2024. All rights reserved.