我正在尝试创建一个简单的 iOS 应用程序,它将在后台持续跟踪位置并在用户进入特定区域时以高精度通知(不想使用区域监控,因为它不够准确或不够快我想要什么)。
此应用程序在前台运行良好,但一旦我进入后台,它就无法运行。
我创建了一个测试应用程序来研究后台位置更新的工作原理。我制作了一个简单的应用程序,当发生位置更新时(向日志)打印一条消息。
我看到的是,在前台模式下,更新会按预期进行,但是当我锁定手机并且应用程序切换到后台时,位置更新会持续大约 30 秒,然后停止。 Apple 文档(我能找到)中没有提及解释此行为。
我确保我在 info.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 等),但没有任何变化。
谢谢。
最佳答案
你必须在你的 plist 中添加这个:
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
添加这个
locationManager.allowsBackgroundLocationUpdates = true
关于ios - 在后台持续更新 iOS 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498693/