我创建了一个应用程序,当它进入后台时,我需要向服务器发送一些定期数据。 为了从后台唤醒我使用后台更新显着位置(更低的电池)。 我注意到当wifi / 3g的手机信箱或3g更换手机信号塔时,位置会更新,但我的问题是,如果用户没有移动(然后手机信号塔没有改变),则位置不会更新和应用程序doest唤醒,然后我无法将数据发送到服务器。
你知道解决这个问题的方法吗?
我在AppDelegate文件中执行所有操作:
class AppDelegate: UIResponder, UIApplicationDelegate , CLLocationManagerDelegate{
var manager = CLLocationManager()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.delegate = self
manager.requestAlwaysAuthorization()
manager.allowsBackgroundLocationUpdates = true
return true
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){
sendDataToServer()
}
func applicationDidEnterBackground(_ application: UIApplication) {
manager.startMonitoringSignificantLocationChanges()
}
}
答案 0 :(得分:2)
只有在位置发生变化(即单元塔更改)时才会触发重要位置更改事件。如果你需要定期下载或上传数据,你应该使用后台获取而不是位置更改来唤醒应用程序:
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
然后处理
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
答案 1 :(得分:0)