我正在使用 CLLocationManager 从用户那里获取坐标,我需要在后台和设备重新启动时一直获取位置(Uber 司机风格)。我正在使用 allowBackgroundLocationUpdates= true 和 pausesLocationUpdatesAutomatically=false 在后台获取位置并且它们工作正常,但是当您重新启动手机时,有时 CLLocationManager 会停止工作。
我阅读了有关 startMonitoringSignificantLocationChanges 方法的信息,并且(假设)是重启设备后继续获取位置的唯一方法。但有时有效,有时无效。我阅读了很多 stackoverflows 和文档,但我不知道发生了什么。
其他失败的方法:a)我阅读了有关计时器的信息,但没有办法,因为您可以在前台运行它,也可以在后台运行 3 分钟。b) 在 android 中,您可以使用广播接收器 (BOOT_COMPLETED) 发送消息以唤醒您的应用程序,但在 iOS 中这是不可能的。
我认为唯一可能的方法是使用 CLLocationManager 但是当你重新启动 iphone 时它很少有行为。任何想法?
这是我的代码:
private lazy var locationManager: CLLocationManager = {
let manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.distanceFilter = 100
manager.pausesLocationUpdatesAutomatically=false
manager.allowsBackgroundLocationUpdates = true
manager.delegate = self
manager.requestAlwaysAuthorization()
return manager
}()
我正在使用 startUpdatingLocation 和 startMonitoringSignificantLocationChanges 方法进行测试。
我正在真实设备中进行测试(iphone 6 plus - iOS 10.3)在此先感谢。