【发布时间】:2016-09-14 08:17:16
【问题描述】:
我正在(在 Swift 中)编写一个需要位置更新的 iOS 9 应用程序,包括在后台模式下。问题是我只能在前台获取位置更新。我认为我做的一切都是正确的:
在 info.plist 中:
为 NSLocationAlwaysUsageDescription 指定了一个值。
为 NSLocationUsageDescription 指定了一个值。
为 NSLocationWhenInUseUsageDescription 指定了一个值。
在 UIBackgroundModes 中包含“位置”。
在 UIRequiredDeviceCapabilities 中包含“gps”和“location-services”
-
按如下方式启动位置管理器:
let locationManager = CLLocationManager() locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters locationManager.distanceFilter = 250.0 locationManager.allowsBackgroundLocationUpdates = true locationManager.startUpdatingLocation() 我也验证了 locationManager.pausesLocationUpdatesAutomatically 为假。
当应用程序不在前台时,我得到 no 位置更新。我获得位置更新的唯一时间是我将应用程序置于前台,即便如此,也不是一直如此。
知道出了什么问题吗?还是我的预期不正确?
【问题讨论】:
-
我看到您将距离过滤器设置为 250。您是否尝试了较小的值/您走得够远吗?
-
kCLLocationAccuracyHundredMeters 的位置精度不会使用 GPS,因此您可能需要移动一段距离才能获得任何更新;可能在500-600m的数量级。你在哪里分配你的位置经理?它是您的 AppDelegate 的属性吗?如果您不需要快速更新或精确位置,最好使用显着位置变化监控
-
我看到绝对没有位置更新,即使在行驶 10-30 英里之后也是如此。仅当我将应用程序置于前台时才会更新。
-
位置管理器是一个类的静态字段,虽然不是 AppDelegate。关于重大变更通知:我在那里看到了同样的问题,这就是我切换到标准的原因。
-
可能是某种省电模式可以防止这种情况发生吗?
标签: ios swift core-location