我的应用程序适用于连续的后台位置更新。 当然它拥有所有权限和其他内容,如
allowsBackgroundLocationUpdates = true
最初我想在后台使用LowPowerMode
通知时对 NSProcessInfoPowerStateDidChange
更改作出反应。并且无需调用allowsBackgroundLocationUpdates
即可停用stopUpdatingLocation
以停止更新位置。
但是,我在收到通知并设置
后发现了allowsBackgroundLocationUpdates = false
后台应用程序中的正在继续工作。
所以我进一步确定了,禁用 allowsBackgroundLocationUpdates
甚至在前景中在最初设置为true
之后就没有了工作。应用程序继续在后台工作。
Apple关于此事的文件
您使用此属性来启用和禁用基于您的行为 应用程序的行为
从CLLocationManager类,allowsBackgroundLocationUpdates
属性
GitHub上的将UIBackgroundModes设置为包含" location"在Info.plist中,你 每次调用时,还必须在运行时将此属性设置为YES -startUpdatingLocation意图在后台继续。将此属性重置为NO等同于省略" location" 来自UIBackgroundModes值。
Simple project显示了我提到的行为。
所以问题是,财产的故意行为是什么?
答案 0 :(得分:1)
当此属性的值为false时,应用会根据其当前授权 在前台或 后台运行时正常接收位置更新。更新仅在应用程序暂停时停止,从而阻止应用程序被唤醒以处理这些事件。Apple API Discussion。
我认为财产讨论可以解决您的问题。
答案 1 :(得分:0)
尽管它可能具有误导性的名称,但看起来requestWhenInUseAuthorization()
会给你你想要的行为(比如@ zhongwuzw said)。
来自文档:
如果用户向您的应用授予“使用中”授权,您的应用可以启动大多数(但不是全部)位置服务,因为它位于前台。 (应用无法使用任何自动重新启动应用的服务,例如区域监控或重要的位置更改服务。)如果您的应用已启用后台,则在前台启动时,服务会继续在后台运行 Xcode项目的Capabilities选项卡中的位置更新。在您的应用在后台运行时尝试启动位置服务将失败。
如果你需要"总是"权限(或者用户在没有您通过“设置”应用程序要求的情况下授予权限),我发现停止并立即重新启动位置管理器会强制allowsBackgroundLocationUpdates
生效。
答案 2 :(得分:0)
我发现我必须停止并重新启动位置更新,以使allowBackgroundLocationUpdates在以前设置为true时将其设置为false
locationManager?.allowsBackgroundLocationUpdates = false
locationManager?.stopUpdatingLocation()
locationManager?.startUpdatingLocation()
然后它将生效。.