我正在尝试创建一个简单的iOS应用程序,以在后台持续跟踪位置,并在用户进入特定区域时高精度通知(不希望使用区域监控,因为它对于我想做的事情来说不够准确或快速)。
这个应用程序在前台运作良好,但一旦进入后台就无法工作。
我创建了一个测试应用程序来研究后台位置更新如何工作。我制作了一个简单的应用程序,当发生位置更新时(到日志中)只需打印出消息即可。
我看到的是,在前台模式下,位置更新按预期发生,但当我锁定手机并且应用程序切换到后台时,位置更新大约持续30秒然后停止。在Apple文档中没有提及关于这种行为的说明(据我所知)。
我确保在info.plist中启用了后台处理(在“capabilities”->“background modes”->“location updates”完成)。
以下是我用来测试的代码:
有什么想法我可能会错过了什么吗?我尝试了不同的位置精度设置(如BestForNavigation等),但没有变化。谢谢。
这个应用程序在前台运作良好,但一旦进入后台就无法工作。
我创建了一个测试应用程序来研究后台位置更新如何工作。我制作了一个简单的应用程序,当发生位置更新时(到日志中)只需打印出消息即可。
我看到的是,在前台模式下,位置更新按预期发生,但当我锁定手机并且应用程序切换到后台时,位置更新大约持续30秒然后停止。在Apple文档中没有提及关于这种行为的说明(据我所知)。
我确保在info.plist中启用了后台处理(在“capabilities”->“background modes”->“location updates”完成)。
以下是我用来测试的代码:
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等),但没有变化。谢谢。