gpt4 book ai didi

IOS - 运行后台任务以使用 swift 更新用户位置

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:47 25 4
gpt4 key购买 nike

我是这里的新用户,但我已经多次使用 stackoverflow :)...我是 android 开发人员,但现在我正在使用 swift 开发 ios 应用程序。我是 xcode 的新手,也许我的问题很简单……太好了,我真的需要帮助。我正在尝试实现每十分钟更新一次用户位置的后台任务。我需要获取纬度和经度数据,然后将此信息发送到 API Web 服务。我一直在 rading backgroud docs ,所有文档,以及关于 user location services 的所有文档.有很多信息,漂亮的信息,但是,也许我很习惯 android 信息,也有很多信息,但是还有很多简单的例子,那么,对我来说很容易。和一个 previous stackoverflow question也许对我有很大帮助。

我了解很多概念,并且我按照文档中的说明配置了我的 info.plist,但是......我如何运行后台任务来获取用户位置?我必须在哪里编写后台任务代码?什么是开始?我有一个包含三个不同 View Controller 的项目,我需要用一个按钮启动服务...非常感谢,我真的需要了解这一切的起点。

最佳答案

我目前正在做与我的第一个 iOS 项目相同的事情——对我有帮助的是: Periodic iOS background location updates

从那里我找到了 https://github.com/voyage11/Location 的 Swift-Port : https://github.com/silento/Location .在 voyage11 的项目中,还链接了一篇博客文章,该文章稍微阐明了正在发生的事情,并且还链接到第二篇文章,该文章讲述了如何使用“重大位置更改”重新启动定位服务。我目前正在尝试通过“区域位置监控”来实现这一点,但不确定它是否有效。

哦,我将触发新后台任务的代码从 didUpdateLocation 部分移到了 restartLocationUpdates 部分 - 这样即使您没有及时获得位置,您也可以确保任务重新启动。

它从一开始就不起作用,但是当我添加来自 https://stackoverflow.com/a/19085518/3085985 的代码时作为 stopUpdatingLocation() 和 startUpdatingLocation() 部件的替代品。

它真的比它应该的更复杂,我在 Android 中使用的是什么 - 但它就是这样。如果您正在为 Iphone5+ 开发,您也可以考虑这篇文章(我现在无法测试它,因为我只有 iPhone 4S 并且模拟器不支持该功能):https://stackoverflow.com/a/24666487/3085985 .

我希望你有一些起点,我目前仍在测试我的解决方案,但就我现在所见,它似乎有效 ;)

P.S.:我在某处读到有关休眠超过 5 分钟的后台任务被取消的信息 - 因为我只等待 30 秒,我没有遇到这个问题,但你可能遇到了。但也许让定位服务在非常远的距离内运行可以防止这种情况发生。

P.P.S.:由于 Swift 是新的,您应该习惯于阅读 Objective C 代码并尝试将其翻译成 Swift。它通常是找到好的教程的唯一途径。

还有一件事 - 对于 iOS8 你需要这样的东西:

if (self.locationManager.respondsToSelector(Selector("requestWhenInUseAuthorization"))) {
// on iOS8+, we need to request the location authorization ourselves -.-

self.locationManager.requestAlwaysAuthorization()
}

并且不要忘记将“NSLocationAlwaysUsageDescription”添加到您的 Info.plist 以及允许在您的项目功能中进行后台位置更新。抱歉,文字乱七八糟,但这是一个非常复杂的话题;)

编辑:关于您的第一条评论:您应该创建一个 Swift 项目,例如带有一个窗口并位于 Main 中。 Storyboard添加一个开关。然后你应该实现一个 ToggleActionChanged 事件来启用或禁用监听器,这取决于开关的新状态。我无法解释所有的基础知识,你应该看一个基础教程,我喜欢https://www.youtube.com/playlist?list=PL_4rJ_acBNMHa_RGZigG2nQI3aL1kTa4r并特别使用第 7 个视频作为如何构建基本应用程序的示例。唯一可以比显示的更简单的方法是使用右键单击并从 Storyboard拖动到代码 View ,而不是手动实现一些方法。有一个得心应手的助手。

对于您的位置事件监听器,您可以添加一个新的 swift 类并将其命名为例如LocationDelegate.swift 。它使它更干净一点。我为此使用了单例模式,您可以查看如何执行此操作。或者你可以使用我上面发布的 github-project 的结构。我无法提供完整的源代码,因为您需要对其进行更改以使其适合您的个人需求;)

哦,还有一件事:要记住您的开关是否在应用程序启动之间启用,您可以使用这样的东西:

   @IBAction func toggleTrackingChanged(sender: UISwitch) {


// This is your method for when the switch changed... put your location activation/deactivation here



let userDefaults = NSUserDefaults.standardUserDefaults()

userDefaults.setBool(sender.on, forKey: "ODLTrackingActive")
}

}

并在您的 viewDidLoad-Method 中:

let userDefaults = NSUserDefaults.standardUserDefaults()

var trackingActive = userDefaults.boolForKey("ODLTrackingActive")

toggleTrackingSwitch.setOn(trackingActive, animated: false)

// reactivate location tracking if necessary

祝你好运!

关于IOS - 运行后台任务以使用 swift 更新用户位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28503990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com