【发布时间】:2017-06-01 22:32:28
【问题描述】:
我的应用程序适用于持续的后台位置更新。 当然它拥有所有的权限和其他的东西,比如
allowsBackgroundLocationUpdates = true
最初,我想在后台使用NSProcessInfoPowerStateDidChange 通知对 LowPowerMode 更改做出反应。并禁用allowsBackgroundLocationUpdates 停止更新位置而不调用stopUpdatingLocation。
但是我收到通知并设置后发现
allowsBackgroundLocationUpdates = false
后台应用程序正在运行。
所以我更进一步发现,在最初设置为 true 之后,禁用 allowsBackgroundLocationUpdates 即使在前台 也根本不起作用。应用程序继续在后台运行。
Apple 关于此事的文档
您使用此属性来启用和禁用基于您的行为 应用的行为
来自 CLLocationManager 类,allowsBackgroundLocationUpdates 属性的描述
将 UIBackgroundModes 设置为在 Info.plist 中包含“位置”,您 每次调用时还必须在运行时将此属性设置为 YES -startUpdatingLocation 意图在后台继续。将此属性重置为 NO 相当于省略“位置” 来自 UIBackgroundModes 值。
Simple project 在 GitHub 上显示了我提到的行为。
那么问题来了,这是财产的故意行为吗?
【问题讨论】:
-
我在 iOS 11 中也发现了这一点。奇怪的是,这似乎在模拟器中工作,但在实际设备上却没有。我必须重新启动我的应用才能使其生效,因此“切换”不起作用。
标签: ios objective-c swift core-location cllocationmanager