如何在ios应用程序中的所有视图控制器中跟踪用户位置?

时间:2019-06-07 03:40:05

标签: ios swift firebase geofire

我正在构建一个在打开应用程序时跟踪用户位置并使用geofire查询它的应用程序。我想让用户可能已经打开的任何视图控制器都更新位置。我想知道如何做到这一点。

当前,我在主视图控制器中设置了我的geofire和位置跟踪。为了使位置跟踪在所有视图控制器上都能正常工作,我是否必须对每个单独的视图控制器进行编码以跟踪位置,还是可以将代码放入例如应用程序委托文件中?

4 个答案:

答案 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中。也许在访问服务器时使用计时器,以便优化性能

请参考以下答案: Location Manager update frequency, iphone

答案 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类)

  •   
  • 电池电量消耗少。
  •