【发布时间】:2018-03-11 22:35:42
【问题描述】:
我正在尝试创建一个简单的 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 等),没有任何变化。
谢谢。
【问题讨论】:
-
我想澄清一下,为了在后台测试位置更新,打印语句将不起作用(只有在应用程序处于前台时打印到 Mac 才能起作用)。为了测试它,我添加了一些代码来在 didUpdateLocations 中发送本地通知。当我切换到后台时,只要位置更新,就会向我发送通知。切换到后台后,我收到了大约 30 秒的通知,然后它们就停止了。
-
另外,需要明确的是,我允许 info.plist 中位置的后台处理模式
标签: ios iphone location core-location