禁用allowBackgroundLocationUpdates(CLLocationManager)在启用后不起作用

我的应用程序与连续的后台位置更新。 当然,它有所有的权限和其他的东西

allowsBackgroundLocationUpdates = true 

最初,我想在后台使用NSProcessInfoPowerStateDidChange通知对NSProcessInfoPowerStateDidChange更改做出反应 。 并禁用allowsBackgroundLocationUpdates 停止更新位置,而无需调用stopUpdatingLocation

但是,我收到通知和设置后发现

 allowsBackgroundLocationUpdates = false 

在后台应用程序正在进行工作。

所以我走得更远,并确定, 禁用 allowsBackgroundLocationUpdates即使最初设置为true 前景 ,根本不工作。 应用程序继续在后台工作。

苹果关于此事的文件

你使用这个属性来启用和禁用基于你的应用行为的行为


从CLLocationManager类, allowsBackgroundLocationUpdates属性的描述

将UIBackgroundModes设置为包含Info.plist中的“位置”时,只要调用-startUpdatingLocation以在后台继续,就必须在运行时将此属性设置为YES。 将此属性重置为NO相当于从UIBackgroundMode值中省略“位置”。

显示我提到的行为的简单项目在GitHub上。

所以这个问题,这是财产的故意行为吗?

当此属性的值为false时,应用程序会根据当前授权在前台或后台运行时正常接收位置更新。 更新仅在应用程序被暂停时停止,从而防止应用程序被唤醒来处理这些事件。 Apple API讨论 。

我认为物业讨论可以解决你的问题。