- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是这里的新用户,但我已经多次使用 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/
从 0 开始搭建一套后台管理系统,成本巨大,所以都会选择一套成熟的组件库,基于此,再堆叠业务逻辑。我们公司的组件库基于 Ant Design。Ant Design 包含一套完整的后台解决方案,不仅
在我的 IOS 应用程序中,我有一个标记为 retain 的 NSDate* 属性 当我的应用程序再次激活时,属性值已被释放。 我是否误解了属性和内存管理的工作原理,我该如何防范? 最佳答案 很明显,
我有一个使用 BackgroundWorker 组件的示例 WinForms 应用程序。它工作正常,但是当我点击 Cancel 按钮取消后台线程时,它并没有取消线程。当我点击 Cancel 按钮调用
我目前正在开发一个应用程序,该应用程序在启动时会对服务器执行 ping 操作,该服务器会为每个连接的设备返回一个唯一标识符。设备每 5 秒从服务器检索另一页以获取一组不同的数据。这个唯一的 ID 可以
我正在开发一个应用程序,当它通过主页按钮在后台按下时,计时器应该启动,当应用程序返回前台并且计时器已经过了一定时间时,应该是执行。 我的问题是 当我的应用程序转到背景/前景? 是否有特殊的方法或其他技
我有 map View ,其中几乎没有 MKPointAnnotation。 一切正常,但是, View 的 MKPoiintAnnotation 的“背景”是“不可见的”,因此不是很“可见”。 我想
我在 iOS 中开发广告数据应用程序。我的应用程序广告数据在前台很好。但我想在 ios 后台宣传信标数据。我设置了背景外设设置。和广告数据 advertisingData = [CBAdvertise
如果我有一组操作,我想根据特定条件在后台工作程序中运行,例如,我有 10 个条件 if(a) BackgroundWorker doA = new backgroundworker() if(
我想独立运行一个函数。从我调用的函数中,我想在不等待其他函数结束的情况下返回。 我试过用 threadind,但这会等待,结束。 thread = threading.Thread(target=my
我想在用户在线时立即执行一些任务,即使他在后台也是如此。我正在使用 Reachability 类来检查互联网。但是当我在后台时,这个类没有通知我。我知道有人早些时候问过这个问题,但没有找到任何解决方案
我在后台播放文本转语音时出现间歇性(哎呀!)问题,由 Apple Watch 触发。我已经正确设置了后台模式、AVSession 类别和 WatchKitExtensionRequest 处理程序。
我有一个相当复杂的程序,所以我不会在这里转储整个程序。这是一个简化版本: class Report { private BackgroundWorker worker; public
我有一个任务在 backgroundworker 中运行。单击开始按钮,用户将启动该过程,并获得一个取消按钮来取消处理。 当用户点击取消时,我想显示一个消息框“进程尚未完成,你想继续吗”。 这里我希望
我有一个按以下方式编码的脚本。我想将它作为后台/守护进程运行,但是一旦我启动脚本,如果我关闭它从程序运行的终端窗口终止。我需要做什么来保持程序运行 loop do pid = fork do
我正在制作一个使用 ActivityRecognition API 在后台跟踪用户 Activity 的应用,如果用户在指定时间段(例如 1 小时)内停留在同一个地方,系统就会推送通知告诉用户去散步.
当尝试使用 URLSession 的 dataTaskPublisher 方法发送后台请求时: URLSession(configuration: URLSessionConfiguration.ba
当我编译这段代码时,我得到了他的错误,对象引用设置为null,错误位置在Dowork中,argumenttest.valueone = 8; public partial class Form1 :
有什么方法可以使用最小化或不活动的应用程序吗?我可以打开我的应用程序,然后打开并使用另一个应用程序,然后按一个按钮来激活我的程序吗? 例如,打开我的应用程序,打开 Safari,按下按钮(F1 或任何
我的具体要求是一个在后台运行的应用程序,被通知显示器即将进入休眠状态或者设备已经或即将达到空闲超时 - 然后唤醒并执行一些(简短的)一段代码。 我在这里找到了有关应用程序被置于后台或暂停的通知的引用:
我有一个 LSUIElement 设置为 1 的应用程序。它有一个内置编辑器,因此我希望该应用程序在编辑器打开时出现在 Cmd+Tab 循环中。 -(void)stepIntoForegrou
我是一名优秀的程序员,十分优秀!