【问题标题】:Can't endBackgroundTask: no background task exists with identifier *, or it may have already been endedCan't endBackgroundTask:不存在标识符为 * 的后台任务,或者它可能已经结束
【发布时间】:2015-06-18 12:58:11
【问题描述】:

我的应用通过以下方式监控用户位置更新(不一定是重大的位置变化):

someLocationManager = [[CLLocationManager alloc] init];
[someLocationManager setDelegate:self];
[someLocationManager startUpdatingLocation];

当应用程序(在模拟器中)处于前台时,一切正常,但是当将其挂起到后台(未终止)时,我在日志中收到此错误:

无法结束BackgroundTask:不存在标识符为*的后台任务,或者它可能已经结束

此错误的所有其他答案都与位置服务无关,而只是一般的后台任务问题。

【问题讨论】:

  • 发布您自己的问题/答案很好,但至少让您的“问题”成为一个实际问题。无需提及您将回答自己的问题。
  • 我认为表现得像一个真正的问题没有任何好处。提出一个真正的问题——这就是重点,所以我做到了。

标签: ios objective-c core-location uibackgroundtask


【解决方案1】:

因此,为了使后台位置更新正常工作,似乎应该进行以下 3 项设置。 这样做并解决问题:

  1. info.plist 中设置NSLocationAlwaysUsageDescription 键(以值作为许可的原因)。
  2. 请求许可时请务必致电[someLocationManager requestAlwaysAuthorization];
  3. 在目标设置的Capabilities 部分中的Background Modes 中启用Location Updates。不确定这个,但听起来不错。

享受吧!

【讨论】:

  • @AshishKakkad 很好。
  • 您没有提到发布的三个步骤是否确实修复了错误。是吗?
  • "...应该进行以使后台位置更新正常工作",所以是的,它解决了问题。我对其进行了编辑以使其更清晰。
【解决方案2】:

在从用户获取位置授权时添加以下代码。因为苹果从 iOS9 更改了默认的allowBackgroundLocationUpdates NO。

'if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
    locationManager.allowsBackgroundLocationUpdates = YES;
}'

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 2014-07-15
    • 2020-05-26
    • 2020-02-27
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多