当前位置: 首页 > 面试题库 >

iOS-运行后台任务以使用Swift更新用户位置

欧阳楚
2023-03-14
问题内容

我是这里的新用户,但是我已经使用stackoverflow很多次了:)…我是android开发人员,但是现在我正在使用swift在ios应用程序中工作。我对使用xcode完全陌生,也许我的问题在很多方面都很简单…太好了,我真的需要帮助。我正在尝试实现一个背景任务,该任务每十分钟更新一次用户位置。我需要获取经纬度数据,并将此信息发送到API网络服务。我一直在介绍backgroud文档,所有文档以及有关用户位置服务的所有文档。有很多信息,很漂亮的信息,但是,也许我非常喜欢android信息,也有很多信息,但是对于我来说,也有很多简单的示例。也许有很多帮助。

我了解很多概念,并且像文档中所述将我的info.plist进行了配置,但是…如何运行后台任务来获取用户位置?我必须在哪里编写后台任务代码?什么开始?我有一个包含三个不同的视图控制器的项目,我需要用一个按钮启动该服务…非常感谢,我真的需要了解所有这些内容的起点。


问题答案:

我目前正在做与第一个iOS项目相同的事情-这对我有所帮助:定期更新iOS背景位置

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

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

它从一开始就不起作用,但是当我从添加代码以替代stopUpdatingLocation()和startUpdatingLocation()-部分时。

它确实比它应该的复杂,以及我在Android中使用的东西-确实如此。如果您正在为Iphone5 +开发,也可以考虑这篇文章(由于我只有iPhone4S,并且模拟器中不支持该功能,因此我目前无法对其进行测试)。

希望您有一些起点,我目前仍在测试我的解决方案,但是据我所知,它似乎可以正常工作;)

PS:我在某处读到一些有关后台任务的信息,这些任务休眠5分钟以上被取消-
因为我只等待30秒,所以我没有这个问题,但是您可能有。但是也许保持位置服务远距离运行可以防止这种情况发生。

PPS:随着Swift的出现,您应该习惯于阅读Objective C代码并将其转换为Swift。这通常是找到好的教程的唯一方法。

还有一件事-对于iOS8,您需要以下内容:

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

            self.locationManager.requestAlwaysAuthorization()
        }

并且不要忘记在您的Info.plist中添加“
NSLocationAlwaysUsageDescription”,以及在项目功能中允许后台位置更新。很抱歉造成这样的混乱,但这是一个非常复杂的话题;)

编辑
:关于您的第一个评论:您应该创建一个Swift项目,例如,在单个窗口中并在Main中。情节提要添加一个开关。然后,您应该实现ToggleActionChanged-
event来启用或禁用侦听器,具体取决于开关的新状态。我无法解释所有基础知识,您应该观看基础教程,我喜欢https://www.youtube.com/playlist?list=PL_4rJ_acBNMHa_RGZigG2nQI3aL1kTa4r,尤其是使用第7个视频作为如何构建基本应用程序的示例。唯一比显示容易的方法是使用右键单击从情节提要板到代码视图的方式,而不是手动实现某些方法。有一个方便的助手。

对于您的位置事件侦听器,您可以添加一个新的swift类并将其命名为LocationDelegate.swift。它使它更干净。为此,我使用了Singleton模式,您可以查看如何执行此操作。或者,您可以使用我上面发布的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

祝好运!



 类似资料:
  • 问题内容: 我写了下面的代码,其中包含一个计时器,每分钟调用一次回调函数。当应用程序进入后台时,我已经启动了另一个计时器,该计时器调用相同的回调方法,但是后台计时器仅工作三分钟。 我了解到Apple仅允许后台任务执行三分钟。我的应用程序更像是一个跟踪应用程序,即使在后台运行该应用程序,它也每分钟都会跟踪用户的位置,因此我需要实现此功能。 我了解到将要使用它,但是我不知道我的实现是否正确。 注意:我

  • 问题内容: 我必须使用Swift 3在iOS中制作一个应用程序,该应用程序在后台运行时每3或5分钟通过API发送一次用户的位置信息。我不知道哪种方法是最好的方法,或者由于苹果严格的背景规定,是否有可能这样做。该位置必须非常精确,并且该应用需要在背景下长时间运行,可能不会消耗太多电池。如果不可能,那么很高兴知道在这种情况下哪种方法最好。非常感谢你。 问题答案: 该应用程序在后台运行时每3或5分钟通过

  • 我正在编写一个应用程序,需要高精度和低频率的背景位置更新。解决方案似乎是一个后台NSTimer任务,它启动location manager的更新,然后立即关闭。这个问题以前有人问过: 如何在iOS应用程序中每n分钟更新一次后台位置? 在应用程序进入后台后每n分钟获取一次用户位置 iOS不是典型的后台位置跟踪计时器问题 iOS长时间运行的后台计时器,具有“位置”后台模式 基于位置跟踪的iOS全职后台

  • 我的背景粘性服务是杀死奥利奥和更高的设备,任何解决方案,以获得位置的背景服务时,活动是在后台

  • 我写了下面的代码,它有一个定时器,每分钟调用一个回调函数。当应用程序转到后台时,我启动了另一个计时器,调用相同的回调方法,但后台计时器仅工作三分钟。 我知道苹果只允许后台任务三分钟。我的应用程序更像一个跟踪应用程序,即使应用程序在后台,也可以每分钟跟踪用户的位置,所以我需要实现这个功能。 我了解到将使用,但我不知道我的实现是否正确。 注意:我在plist-toApp寄存器中有位置更新所需的背景模式

  • 问题内容: 我一直在寻找这个,但是我似乎找不到。我知道如何使用来关闭键盘,但是我不知道如何使用?有人知道吗? 问题答案: 如果要多次使用此功能,这是另一种执行此任务的方法: 现在在每个中,您所需要做的就是调用此函数: 此功能作为标准功能包含在我的存储库中,其中包含许多类似这样的有用的Swift扩展,请查看:https : //github.com/goktugyil/EZSwiftExtensio