簡體   English   中英

CLLocationManager的startMonitoringSignificantLocationChanges()和startUpdatingLocation()方法有什么區別?

[英]What is difference between startMonitoringSignificantLocationChanges() and startUpdatingLocation() method of CLLocationManager?

我正在使用CLLocationManager類。 我想定期獲取位置更新。 我在didUpdateLocations方法中找到了兩種獲取位置的方法,即startUpdatingLocation()startMonitoringSignificantLocationChanges() 如果我必須在前台模式中跟蹤位置更新,那么我應該使用哪種方法?

2之間最重要的區別是:

startMonitoringSignificantLocationChanges:它不依賴distanceFilter屬性中的值來生成事件。 僅當檢測到用戶位置的顯着變化時,接收器才生成更新事件

startUpdatingLocation:接收器主要在超出distanceFilter屬性值時生成更新事件

因此,如果您想要更高的精度,請選擇startUpdatingLocation ,代價是更多的電池消耗,但更精確的位置。 這實際上取決於你的目標,你應該評估權衡。

startMonitoringSignificantLocationChanges以異步方式啟動位置事件的傳遞,在您調用它后不久返回。 位置事件將傳遞給您委托的locationManager:didUpdateLocations:方法。 要傳遞的第一個事件通常是最近緩存的位置事件(如果有),但在某些情況下可能是較新的事件。 在返回當前位置修復之后,接收器僅在檢測到用戶位置的顯着變化時才生成更新事件。 只要設備從之前的通知移動500米或更長時間,應用就會收到通知。

總結startMonitoringSignificantLocationChanges只會在位置變化大約500米左右或者在一段固定時間后說5分鍾后才會為您提供位置。 startUpdatingLocation將根據distanceFilter屬性集為您提供位置。 distanceFilter默認值是kCLDistanceFilterNone ,它報告所有移動。

startUpdatingLocation立即返回。 調用此方法會導致位置管理器獲取初始位置修復(可能需要幾秒鍾),並通過調用其locationManager:didUpdateLocations:方法來通知您的委托。 之后,接收器主要在超出distanceFilter屬性值時生成更新事件。 但是,更新可能會在其他情況下提供。 例如,如果硬件收集更准確的位置讀數,則接收器可以發送另一通知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM