CoreLocation-使用authorizedWhenInUse授权

时间:2020-06-01 11:21:53

标签: ios swift core-location

我需要在后台跟踪用户位置,例如位智和苹果地图中的导航功能。

但是,我想在 authorizedWheninuse 权限下使用它。

据我了解,即使具有 authorizedWhenInUse 权限,应用程序也可以跟踪用户位置,因为在这种状态下,应用程序被视为前景(状态上方显示蓝线bar-表示用户知道应用程序正在执行定位工作)

当我授予 authorizedAlways 权限时,一切正常。

但是,当权限为 authorizedWhenInUse 时,我将应用程序发送到后台,出现蓝线,但应用程序在大约一分钟后终止,并且日志中出现以下消息:< br /> 来自调试器的消息:由于信号9而终止

这是我在进入后台之前跟踪位置更新的方式:

locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.delegate = self
locationManager.startUpdatingLocation()

我的plist包含后台模式:

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

2 个答案:

答案 0 :(得分:0)

尝试将showsBackgroundLocationIndicator属性设置为true

https://developer.apple.com/documentation/corelocation/choosing_the_location_services_authorization_to_request说:

位置服务适用于具有 CLAuthorizationStatus.authorizedWhenIn仅在应用处于“ 采用”。在支持使用中授权的所有平台上,一个应用 被认为在使用中:

  • 当应用在前台运行时。

  • 应用离开前景后的几秒钟,就会出现短暂的宽限期 您的应用完成用户当前位置任务的期限 启动。

  • 当应用显示后台位置使用情况指示符时 (showsBackgroundLocationIndicator)。在iOS上,指示器为蓝色 屏幕顶部的条或丸;在watchOS上,它是一个小图标。

很高兴阅读整篇文章:)

如果您不想在顶部看到蓝色条,请使用authorizedAlways身份验证类型。

答案 1 :(得分:0)

这可能与核心位置无关。信号9表示您因使用过多的内存或类似设备而被杀。在进入后台之前,您可能需要释放资源。否则,您可能正在尝试在未曾告诉我们的背景下做其他事情。