Swift:如何减少didupdatelocation调用

时间:2017-03-28 09:55:12

标签: swift mapkit

我已经提出了一些打印我所在位置的地址和邮政编码的代码。这是在didupdatelocation函数中完成的。

我遇到的唯一问题是,这个地址的每一秒都会被" didupdatelocation"更新。功能。 因为这种电池效率非常低,所以我一直在寻找使用间隔的方法,但我无法找到方法(也不在Google和stackoverflow上)如何做到这一点。

有人能告诉我如何在Swift中做到这一点吗?

5 个答案:

答案 0 :(得分:2)

试试这个

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [Any]) {
    var mostRecentLocation: CLLocation? = locations.last
    print("Current location: \(mostRecentLocation?.coordinate?.latitude) \(mostRecentLocation?.coordinate?.longitude)")
    var now = Date()
    var interval: TimeInterval = lastTimestamp ? now.timeIntervalSince(lastTimestamp) : 0
    if !lastTimestamp || interval >= 5 * 60 {
        lastTimestamp = now
        print("Sending current location to web service.")
    }
}

答案 1 :(得分:1)

answer

的Swift 3版本
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    var newLocation = locations.last!
    var locationAge = -newLocation.timestamp.timeIntervalSinceNow
    if locationAge > 5.0 {
        return
    }
    if newLocation.horizontalAccuracy < 0 {
        return
    }
        // Needed to filter cached and too old locations
    var loc1 = CLLocation(latitude: currentLocation.coordinate.latitude, longitude: currentLocation.coordinate.longitude)
    var loc2 = CLLocation(latitude: newLocation.coordinate.latitude, longitude: newLocation.coordinate.longitude)
    var distance: Double = loc1.distanceFromLocation(loc2)
    self.currentLocation = newLocation
    if distance > 20 {
        //significant location update
    }
    //location updated
}

答案 2 :(得分:1)

Rajeshkumar和Basir的答案对于电池电量没有太大变化,他们的委托方法仍被称为每分钟相同的次数。

如果您想要更有效的行为,请尝试更改distanceFilter,desiredAccuracy和activityType的值(您可以找到所需的全部内容here

manager.distanceFilter = 50 // distance changes you want to be informed about (in meters)
manager.desiredAccuracy = 10 // biggest approximation you tolerate (in meters)
manager.activityType = .automotiveNavigation // .automotiveNavigation will stop the updates when the device is not moving

此外,如果您只需要用户的位置显着变化,您可以监控significantLocationChanges,也可以在您的应用被杀死时使用。

答案 3 :(得分:1)

如果您想尽可能多地保存电池,可以使用start​Monitoring​Significant​Location​Changes代替start​Updating​Location

它只会通知您超过500米的更改,最短更新间隔为5分钟。

您可以从here了解更多信息。

答案 4 :(得分:0)

尝试使用

manager.pausesLocationUpdatesAutomatically = true

也试着把最大的价值放在

manager.distanceFilter = value