我做了一个应用程序,当它进入后台时,我需要发送一些定期数据到服务器。为了从后台唤醒,我使用了后台更新重要位置(电池电量较低)。我注意到当手机从wifi/3g移动或者当3g改变手机发射塔时,位置会更新,但我的问题是,如果用户不移动(然后手机发射塔没有改变),位置就不会更新,应用程序就会唤醒,然后我就不能向服务器发送数据。
你知道解决这个问题的方法吗?
我在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()
}
}发布于 2016-11-01 00:40:40
重要的位置改变事件仅在存在位置改变(即小区发射塔改变)时触发。如果您需要的是定期下载或上传数据,则应该使用后台获取而不是位置更改来唤醒应用程序:
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)然后处理
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)发布于 2016-11-01 18:52:45
https://stackoverflow.com/questions/40346460
复制相似问题