即使应用程序在后台运行,如何使用 swift 在 ios 中获取位置更新

Posted

技术标签:

【中文标题】即使应用程序在后台运行,如何使用 swift 在 ios 中获取位置更新【英文标题】:How to get location update in ios using swift even when the app is running in background 【发布时间】:2017-02-07 05:06:32 【问题描述】:

我正在开发一个需要定期更新用户位置的应用程序,但是当应用程序暂停或在后台运行时,我无法获取位置更新。我还在功能中启用了后台位置更新。

viewDidLoad 代码:

override func viewDidLoad() 
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.requestAlwaysAuthorization()
        locationManager.requestWhenInUseAuthorization()
        let user=FIRAuth.auth()?.currentUser?.displayName
        if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways || CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse)
            locationManager.requestLocation()
            location=locationManager.location
            locationManager.startUpdatingLocation()
            locationManager.startMonitoringSignificantLocationChanges()
            //updating to database
            ref.child("\(user!)/lat").setValue(location.coordinate.latitude)
            ref.child("\(user!)/long").setValue(location.coordinate.longitude)
            //location=locationManager.location
        


func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
        location=locations[locations.count-1]
    

【问题讨论】:

希望这个答案能帮到你***.com/questions/5323634/… 我认为这个链接对你有帮助***.com/questions/28503990/… @Prakhar 兄弟你必须看看这个github.com/voyage11/Location 我正在使用 swift 为 ios 9 及更高版本开发应用程序 你能告诉我你的代码吗? 【参考方案1】:

启用位置更新 -> 后台模式 -> 功能

我正在使用这种方法在后台获取位置。这个方法写在 AppDelegate 类中

 func getLocation() 
    self.locationManager = CLLocationManager()
    self.locationManager.delegate = self
    if self.locationManager.responds(to: #selector(self.requestAlwaysAuthorization)) 
        self.locationManager.requestAlwaysAuthorization()
    
    self.locationManager.distanceFilter = kCLDistanceFilterNone
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    if !CLLocationManager.locationServicesEnabled() 
            // location services is disabled, alert user
        var servicesDisabledAlert = UIAlertView(title: "Alert", message: "Location service is disable. Please enable to access your current location.", delegate: nil, cancelButtonTitle: "OK", otherButtonTitles: "")
        servicesDisabledAlert.show()
    
    else 
        self.locationManager.startUpdatingLocation()
    

【讨论】:

以上是关于即使应用程序在后台运行,如何使用 swift 在 ios 中获取位置更新的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在后台运行时发送本地通知 Swift 2.0

即使应用程序在后台运行或手机被锁定在 Windows Phone 中,如何让计时器运行

即使屏幕关闭,如何在后台运行代码?

Xamarin Forms:即使应用程序在后台,如何每 x 秒运行一次服务?

即使设备在本机反应中重新启动,如何运行后台任务?

即使应用程序不在后台运行,如何让 iOS 应用程序执行一些代码?