我可以调整locationManager的频率(_:didUpdateLocations :)吗?

问题描述 投票:0回答:4

在模拟器中,此方法仅执行一次。

但是,当使用真实手机进行测试时,它会在同一位置运行多次。

我想控制这种方法的频率。

或者是否可以通过distanceFilter?

如果可能,我该怎么办?

我怀疑只要位置发生变化,locationManager(_:didUpdateLocations :)方法就会自动运行,所以我无法控制它。

有办法吗?

import UIKit
import CoreLocation

class MainViewController: UIViewController, CLLocationManagerDelegate {

    let locationManager = CLLocationManager()


    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        // my source code
    }
}
swift cllocationmanager
4个回答
2
投票

不要使用自iOS 6以来已弃用的func locationManager(_ manager: CLLocationManager, didUpdateTo newLocation: CLLocation, from oldLocation: CLLocation)函数。

deprecated method

设置所需的精度应该可以解决以相对相同的点获得许多更新的问题。对于精度稍低的跟踪,可以试试

locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters

如果您关注长时间运行的跟踪任务/作业,请考虑实施

func locationManagerDidPauseLocationUpdates(CLLocationManager)

func locationManagerDidResumeLocationUpdates(CLLocationManager)

他们会通知您位置没有变化,为了节省电力,设备将关闭一些硬件。

CLLocationMangager

CLLocationManagerDelegate


0
投票

您可以设置位置准确度

self. locationManager.desiredAccuracy = kCLLocationAccuracyBest

https://developer.apple.com/documentation/corelocation/cllocationaccuracy


0
投票

我不确定你能控制它。你可以使用func locationManager(_ manager: CLLocationManager, didUpdateTo newLocation: CLLocation, from oldLocation: CLLocation) { }方法。此方法为您提供最后位置和新位置,并代表这些位置,您可以执行所需的功能。

或者你可以参考这个答案click here


0
投票

位置不随模拟器而变化。你只能从didupdatelocations回调中获得一个调用。在真实设备上运行将导致完成处理程序不断触发。您可以使用GPX文件模拟一个位置,但我不相信它一旦使用模拟器就会激发更多。

期望的准确度确实会改变发射频率,但频率也取决于GPS硬件和电池寿命状态。 iOS控制频率到一定程度,以优化设备性能和使用寿命

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