我正在构建一个在打开应用程序时跟踪用户位置并使用geofire查询它的应用程序。我想让用户可能已经打开的任何视图控制器都更新位置。我想知道如何做到这一点。
当前,我在主视图控制器中设置了我的geofire和位置跟踪。为了使位置跟踪在所有视图控制器上都能正常工作,我是否必须对每个单独的视图控制器进行编码以跟踪位置,还是可以将代码放入例如应用程序委托文件中?
答案 0 :(得分:1)
将其放入应用程序委托.swift
let locationManager = CLLocationManager()
self.locationManager.requestAlwaysAuthorization()
// For use in foreground
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
}
//Here Get Late long.
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
print("locations = \(locValue.latitude) \(locValue.longitude)")
}
答案 1 :(得分:0)
您可以将代码放在AppDelegate中。也许在访问服务器时使用计时器,以便优化性能
答案 2 :(得分:0)
也许此代码会使您大吃一惊,但是您必须在所有的视图控制器中使用它
var LocationManager = CLLocationManager()
LocationManager.requestWhenInUseAuthorization()
if( CLLocationManager.authorizationStatus() == .authorizedWhenInUse ||
CLLocationManager.authorizationStatus() == .authorizedAlways){
print("currentLocation = \(LocationManager.location)")
}
答案 3 :(得分:0)
使用HSLocationManager在有效和无效状态下进行无限位置跟踪。
位置管理器,可让每个位置获取后台位置更新 n秒,并具有所需的定位精度。
优势:
如果位置管理器当前处于运行状态,则操作系统将永远不会杀死我们的应用程序 正在运行。
在需要时定期提供位置更新(范围介于2- 170秒(受允许的最大后台任务时间限制)
可自定义的位置准确性和时间段。
低内存消耗(Singleton类)
- 电池电量消耗少。