当应用程序处于后台

时间:2015-09-07 16:11:47

标签: ios core-location cllocationmanager location-services ios9.1

我正在开发一个应用程序,该应用程序应该能够在应用程序处于后台时收集位置数据。

为了实现这一点,我做了以下工作:

  • 在项目设置中,在Capabilities标签下,我勾选了Location updatesenter image description here

  • 我在应用NSLocationAlwaysUsageDescription中设置了Info.plist密钥,并分配了适当的字符串值。

  • 我已经配置了CLLocationManager的实例,如下所示:
    • locationManager.activityType = .Fitness
    • locationManager.desiredAccuracy = kCLLocationAccuracyBest
    • locationManager.pausesLocationUpdatesAutomatically = false
  • 在开始收集位置之前,我调用locationManager.requestAlwaysAuthorization(),我有适当的委托回调来处理任何错误。
  • 最后,我致电locationManager.startUpdatingLocation()

在模拟器上运行应用程序时,我会打印出位置更新,并且应用程序的徽章也会根据收集的位置数进行更新,但是在实际设备上运行应用程序时,在后台发送应用程序,很快就会停止应用程序处理位置更新(我知道徽章停止更新)。

我是否缺少某种特定于设备的配置?

2 个答案:

答案 0 :(得分:0)

这是我的设置,当应用程序在后台或设备处于待机模式时可以正常工作:

    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.distanceFilter = kCLDistanceFilterNone
    locationManager.pausesLocationUpdatesAutomatically = false
    locationManager.activityType = .Other
    locationManager.startUpdatingLocation()

我也在使用延期位置更新。在didUpdateLocations

if CLLocationManager.deferredLocationUpdatesAvailable() && deferringUpdates == false {
            locationManager.allowDeferredLocationUpdatesUntilTraveled(CLLocationDistanceMax, timeout: deferredLocationTimeout)
            deferringUpdates = true
} 

didFinishDeferredUpdatesWithError

deferringUpdates = false

答案 1 :(得分:0)

在iOS 9中设置功能是不够的。您还需要在位置管理器上设置locationManager.allowsBackgroundLocationUpdates = true,然后操作系统才能在后台为您提供更新。根据文档强制这样做。默认情况下,它设置为false。请参阅here