1

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

为此,我做了以下事情:

  • 在项目设置中,在Capabilities我勾选的选项卡下Location updates在此处输入图像描述

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

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

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

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

4

2 回答 2

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
于 2015-09-08T00:43:04.373 回答
0

从 iOS 9 开始,仅设置功能是不够的。您还需要locationManager.allowsBackgroundLocationUpdates = true在位置管理器上进行设置,然后操作系统才能在后台向您提供更新。根据文档必须这样做。默认情况下,它设置为 false。见这里

于 2016-08-11T23:08:47.717 回答