代码之家  ›  专栏  ›  技术社区  ›  Morocco5

在后台连续更新iOS位置

  •  3
  • Morocco5  · 技术社区  · 7 年前

    这个应用程序在前台运行良好,但一旦我进入后台,它就不工作了。

    我创建了一个测试应用程序来研究背景位置更新的工作原理。我制作了一个简单的应用程序,当发生位置更新(日志)时,它只打印一条消息。

    我看到的是,在前台模式下,更新按预期进行,但当我锁定手机,应用程序切换到后台时,位置更新会发生大约30秒,然后停止。苹果文档(我可以找到)中没有提到解释这种行为。

    我确保在信息中启用了后台处理。plist(在“功能”-->“背景模式”-->“位置更新”中完成)

    import UIKit
    import CoreLocation
    
    class ViewController: UIViewController, CLLocationManagerDelegate {
    
    let locationManager = CLLocationManager() 
    var counter = 0
    override func viewDidLoad() {
        super.viewDidLoad()
    
        // configure location updates
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.distanceFilter = 0.1
        locationManager.pausesLocationUpdatesAutomatically = false
    
        locationManager.requestAlwaysAuthorization()
    
        locationManager.startUpdatingLocation()
    
    }
    
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print("location updated! \(counter)")
        counter = counter + 1
    }
    

    有什么想法我可能会错过?我尝试了不同的定位精度设置(如BestForNavigation等),但没有改变。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Vini App    7 年前

    您必须在plist中添加以下内容:

    <key>UIBackgroundModes</key>
    <array>
        <string>location</string>
    </array>
    

    添加此

    locationManager.allowsBackgroundLocationUpdates = true
    
        2
  •  2
  •   Community Egal    4 年前

    allowsBackgroundLocationUpdates.

    挂起时希望接收位置更新的应用程序必须包括 信息。plist文件并将此属性的值设置为true。

    ...

    这个

    你在设置吗?

        3
  •  0
  •   Muhammad Naeem Paracha    5 年前

    您可以添加这两行,使其在后台模式下工作:

    locationManager!.allowsBackgroundLocationUpdates = true
    locationManager!.pausesLocationUpdatesAutomatically = false