我正在使用CLLocationManager从用户那里获取坐标,我需要在后台获取位置(Uber驱动程序样式)以及何时重启设备。我正在使用allowsBackgroundLocationUpdates = true和pausesLocationUpdatesAutomatically = false来获取后台位置并且它们正常工作,但是当您重新启动手机时,CLLocationManager有时会停止工作。
我了解了startMonitoringSignificantLocationChanges方法,并且(假设)是重启设备后继续获取位置的唯一方法。但有时是工作,有时不工作。我读了很多stackoverflows和doc,但我不知道发生了什么。
其他失败的方法: a)我对Timers感兴趣,但是没有办法,因为你可以在前台运行它或在后台运行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) 提前谢谢。