当应用程序终止时,位置后台模式是否在swift中工作?

时间:2017-11-14 16:53:03

标签: ios swift push-notification cllocationmanager

现在,我正在尝试为我的应用实施位置后台模式。当用户位置更新时,我将安排一个通知(最终我会有条件地安排它们,但是现在我只是安排它们,所以我知道它有效)。我有以下代码:

 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let location = locations.first {
        currentLocation = location
    }
    if UIApplication.shared.applicationState == .background {
    // if the app is in the background
         let notif = UNMutableNotificationContent()
    notif.title = "Location was updated"
    var message = " "
    notif.body = message
    let identifier = String(arc4random())
    var dc = DateComponents()
    var date = Date()
    date = Calendar.current.date(byAdding: .second, value: 3, to: date)!
    dc.hour = Calendar.current.component(.hour, from: date)
    dc.minute = Calendar.current.component(.minute, from: date)
    dc.second = Calendar.current.component(.second, from: date)
    let notifTrigger = UNCalendarNotificationTrigger(dateMatching: dc, repeats: false)
    let request = UNNotificationRequest(identifier: identifier, content: notif, trigger: notifTrigger)
    UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in
        if error != nil {
            print(error!)
        } else {
            print("Notification scheduled!")
        }
    })

当应用程序在后台时,这非常有用,但是当应用程序终止时,我的函数不会被调用,并且通知不会被传递。我的问题是:Swift可以实现吗?或者我使用的locationManager函数是否仅在应用程序背景化但未终止时才起作用?

旁注:我已尝试取出if UIApplication.shared.applicationState == .background并且无法解决问题

2 个答案:

答案 0 :(得分:1)

当您终止应用时,正常的*位置服务会停止,直到您从非背景状态运行startUpdatingLocation

*访问位置服务,区域监控,重要位置更改正常位置跟踪,并在操作系统级别而非应用级别进行管理。

应用终止后,非正常位置跟踪不会停止。

答案 1 :(得分:0)

这是可能的。移动应用程序以触发位置更新。检查准确度为100米并移动您的设备或使用模拟器模拟进行定位。我假设您已经给出了“使用位置始终允许”