我已经提出了一些打印我所在位置的地址和邮政编码的代码。这是在didupdatelocation函数中完成的。
我遇到的唯一问题是,这个地址的每一秒都会被" didupdatelocation"更新。功能。 因为这种电池效率非常低,所以我一直在寻找使用间隔的方法,但我无法找到方法(也不在Google和stackoverflow上)如何做到这一点。
有人能告诉我如何在Swift中做到这一点吗?
答案 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)
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)
如果您想尽可能多地保存电池,可以使用startMonitoringSignificantLocationChanges
代替startUpdatingLocation
。
它只会通知您超过500米的更改,最短更新间隔为5分钟。
您可以从here了解更多信息。
答案 4 :(得分:0)
尝试使用
manager.pausesLocationUpdatesAutomatically = true
也试着把最大的价值放在
上manager.distanceFilter = value