当应用程序处于后台或终止状态时,如何找到用户位置?

Posted

技术标签:

【中文标题】当应用程序处于后台或终止状态时,如何找到用户位置?【英文标题】:How can I find users location when app is in background or killed state? 【发布时间】:2018-09-15 07:30:31 【问题描述】:

当我的应用程序处于后台或终止状态时,我想获得一个新位置。我搜索了很多并在Apple doc中找到了方法。 startMonitoringSignificantLocationChanges() 用于在应用处于后台或终止状态时更新位置。但是当我尝试这种方法时,并没有获得处于被杀状态的位置。 这是我的代码:

override func viewDidLoad() 
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
        locationManager.startMonitoringSignificantLocationChanges()
    

//MARK: LOCATION MANAGER:
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
        let long :CLLocationDegrees = manager.location?.coordinate.longitude ?? 00.00000
        let lat :CLLocationDegrees = manager.location?.coordinate.latitude ?? 00.00000
        print(lat)
        print(long)
        let location = LocationTracking()
        location.latitude = lat
        location.longitude = long

        try! realm.write 
            realm.add(location, update: false)
        
    

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) 
        print("Error",error.localizedDescription)
    

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) 
        if (status == CLAuthorizationStatus.denied) 
            print("Location access denied")
        
    

【问题讨论】:

您需要开启后台模式功能。 @ElTomato 我已经完成了。 【参考方案1】:

设置后台模式能力后,您可以使用 startMonitoringSignificantLocationChanges() 代替 startUpdatingLocations()。此方法会通知您 500 米的变化。

您可以通过公共 api 阅读此报价。

只要设备从之前的通知移动 500 米或更远,应用程序就会收到通知。它不应期望通知的频率超过每五分钟一次。如果设备能够从网络中检索数据,则位置管理器更有可能及时发送通知。

https://developer.apple.com/documentation/corelocation/cllocationmanager/1423531-startmonitoringsignificantlocati

【讨论】:

以上是关于当应用程序处于后台或终止状态时,如何找到用户位置?的主要内容,如果未能解决你的问题,请参考以下文章

即使应用程序处于终止状态或被杀死,如何在 iOS 中获取位置更新? [复制]

应用程序终止时iOS 10更新位置

当应用程序切换到后台时,我的 android 位置服务被终止

当应用程序处于终止状态而没有用户交互时如何清除本地通知。

当应用程序处于终止状态时,iOS 静默推送通知不会收到

FIREBASE_MESSAGING:当应用程序处于后台或终止时,onBackgroundMessage 不处理通知