首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定期更新位置后台Swift 3.0 iOS 10

定期更新位置后台Swift 3.0 iOS 10
EN

Stack Overflow用户
提问于 2016-11-01 00:31:31
回答 2查看 5.5K关注 0票数 3

我做了一个应用程序,当它进入后台时,我需要发送一些定期数据到服务器。为了从后台唤醒,我使用了后台更新重要位置(电池电量较低)。我注意到当手机从wifi/3g移动或者当3g改变手机发射塔时,位置会更新,但我的问题是,如果用户不移动(然后手机发射塔没有改变),位置就不会更新,应用程序就会唤醒,然后我就不能向服务器发送数据。

你知道解决这个问题的方法吗?

我在AppDelegate文件中完成了所有这些操作:

代码语言:javascript
复制
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()
}

}
EN

回答 2

Stack Overflow用户

发布于 2016-11-01 00:40:40

重要的位置改变事件仅在存在位置改变(即小区发射塔改变)时触发。如果您需要的是定期下载或上传数据,则应该使用后台获取而不是位置更改来唤醒应用程序:

代码语言:javascript
复制
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

然后处理

代码语言:javascript
复制
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
票数 2
EN

Stack Overflow用户

发布于 2016-11-01 18:52:45

你有没有试过这个:

https://github.com/paleksandrs/APScheduledLocationManager

最多180秒的后台任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40346460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档