CLLocationManager.requestLocation()大约需要10秒

时间:2016-09-14 20:58:12

标签: ios swift gps core-location

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秒钟吗?或者我错过了什么?

4 个答案:

答案 0 :(得分:7)

如果你关掉

locationManager.requestLocation()

代表

locationManager.startUpdatingLocation() 

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

答案 1 :(得分:2)

TL; DR

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

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

答案 2 :(得分:0)

我认为您有错误的前提。 Google总是更快。我猜测您的构建应用程序从头开始,并且该应用程序无法访问缓存。否则,GoogleMaps有时还会花费3秒钟以上的时间。显然,我不知道确切的细节,但我只是想,当您使用GoogleMaps时,您是以用户的身份使用它,而现在当您在开发自己的应用程序时,您正在考虑将其作为开发人员,即对此一丝不苟。

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

Leo的评论也很重要:请确保您从主队列中更新了用户界面

并且正如两位经验丰富的Core-Location用户所提到的:programmerPaulw11

在位置管理器上致电startUpdatingLocation时,必须给它时间来获得职位。您不应该立即致电stopUpdatingLocation。我们让它最多运行10秒钟,或者直到获得未缓存的高精度位置为止。

答案 3 :(得分:-2)

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

相关问题