【问题标题】:CLLocationManager.requestLocation() takes about 10 secondsCLLocationManager.requestLocation() 大约需要 10 秒
【发布时间】:2017-01-22 19:07:47
【问题描述】:

CLLocationManager.requestLocation() 需要大约 10 秒来触发 didUpdateLocations 事件。

这里是为CLLocationManager设置的属性

let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 10
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()

根据documentation,这可能需要几秒钟。

此方法立即返回。调用它会导致位置管理器获取位置修复(可能需要几秒钟)并使用结果调用委托的 locationManager(_:didUpdateLocations:) 方法。

但这可能需要 10 秒吗?还是我错过了什么?

【问题讨论】:

  • (可能需要几秒钟)。确保从主队列更新 UI
  • 如果 GPS 尚未运行,则需要一段时间才能获得准确的位置。如果找不到位置,则可能需要超过 10 秒才能放弃。
  • 感谢所有 cmets。 @SausageMachine 我没有抱怨,我想知道谷歌地图之类的应用程序如何使用相同的While using 位置访问级别在 3 秒左右获得位置。 @所有天才选民,我问这个是因为我还没有看到一个应用程序花费这么多时间来获取位置。请赐教。

标签: ios swift gps core-location


【解决方案1】:

如果你关闭了

locationManager.requestLocation()

locationManager.startUpdatingLocation() 

然后didUpdateLocations 将立即开始发射。这应该可以解决您的问题。

【讨论】:

  • 谢谢,@bradchattergoon。每次应用程序回到前台时,我都会这样做。对于我的用例,这还不够,所以我在 locationManager.startUpdatingLocation() 之前添加了 locationManager.stopUpdatingLocation()。
【解决方案2】:

我认为你的前提是错误的。 Google 总是更快。我猜您从头开始构建应用程序并且该应用程序无权访问缓存。否则 GoogleMaps 有时也会花费 3 秒以上。显然我不知道确切的细节,但我只是认为,当您使用 GoogleMaps 时,您将其作为用户使用,而现在当您开发自己的应用程序时,您将其视为开发人员,即您是对此更加细致。

还要进行最佳比较,确保将desiredAccuracy 设置为BestForNavigationdistanceFilter 设置为0activityType 设置为.automotive。这通常是导航应用程序正在做的事情。

Leo 的评论也很重要:确保从主队列更新 UI

正如两位经验丰富的核心位置用户所提到的:programmerPaulw11

当您在位置经理上致电startUpdatingLocation 时,您必须给它时间来获得职位。您不应立即致电stopUpdatingLocation。我们让它运行最多 10 秒,或者直到我们得到一个非缓存的高精度位置。

【讨论】:

    【解决方案3】:

    TL;DR

    requestLocation() 是 Apple 提供的一种便捷方法,它在后台运行 startUpdatingLocation() ,检索多个位置数据,并选择最准确的一个传递委托,并调用 stopUpdatingLocation()

    如果无法确定最佳位置数据,此过程最多可能需要 10 秒(大约是超时限制)。

    【讨论】:

      【解决方案4】:

      我将.desiredAccuracy 更改为kCLLocationAccuracyKilometer,我的.requestLocation() 现在立即返回该位置

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 2013-05-25
        • 2021-01-31
        • 1970-01-01
        相关资源
        最近更新 更多