定期更新位置背景Swift 3.0 iOS 10

时间:2016-10-31 16:31:31

标签: ios swift background location

我创建了一个应用程序,当它进入后台时,我需要向服务器发送一些定期数据。 为了从后台唤醒我使用后台更新显着位置(更低的电池)。 我注意到当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()
}

}

2 个答案:

答案 0 :(得分:2)

只有在位置发生变化(即单元塔更改)时才会触发重要位置更改事件。如果你需要定期下载或上传数据,你应该使用后台获取而不是位置更改来唤醒应用程序:

application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

然后处理

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)

答案 1 :(得分:0)

你试过这个:

https://github.com/paleksandrs/APScheduledLocationManager

最多180秒,后台任务。