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

Can I adjust the frequency of locationManager (_: didUpdateLocations :)?

在模拟器中,该方法只执行一次。

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

我想控制这个方法的频率

或者通过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
    }
}

您可以像

一样设置位置精度
self. locationManager.desiredAccuracy = kCLLocationAccuracyBest

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

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

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

位置不随模拟器改变。你只会从 didupdatelocations 回调中得到一个调用。 运行 在真实设备上将导致完成处理程序不断触发。您可以使用 GPX 文件模拟一个位置,但我认为它不会比使用模拟器时触发更多。

所需的精度确实会改变发射频率,但频率还取决于 GPS 硬件和电池寿命状态。 iOS 将频率控制在某个点以优化设备性能和寿命

不要使用 函数 func locationManager(_ manager: CLLocationManager, didUpdateTo newLocation: CLLocation, from oldLocation: CLLocation) 自 iOS 6.

以来它已被弃用

deprecated method

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

locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters

如果您担心长时间 运行 跟踪 tasks/jobs 那么请考虑实施

func locationManagerDidPauseLocationUpdates(CLLocationManager)

func locationManagerDidResumeLocationUpdates(CLLocationManager)

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

CLLocationMangager

CLLocationManagerDelegate