无法结束后台任务:不存在标识符为 * 的后台任务,或者它可能已经结束
Can't endBackgroundTask: no background task exists with identifier *, or it may have already been ended
我的应用通过以下方式监控用户位置更新(不一定是重大位置变化):
someLocationManager = [[CLLocationManager alloc] init];
[someLocationManager setDelegate:self];
[someLocationManager startUpdatingLocation];
当应用程序(在模拟器中)在前台时一切正常,但是当它暂停到后台(不终止)时,我在日志中收到此错误:
Can't endBackgroundTask: no background task exists with identifier *, or it may have already been ended
此错误的所有其他答案都与定位服务无关,只是一般的后台任务问题。
因此看来应该进行以下 3 项设置才能使后台位置更新正常工作。
这样做并解决问题:
- 在
info.plist
. 中设置 NSLocationAlwaysUsageDescription
密钥(以值作为许可的原因)
- 确保在请求许可时调用
[someLocationManager requestAlwaysAuthorization];
。
- 在目标设置的
Capabilities
部分的 Background Modes
中启用 Location Updates
。不确定这个,但听起来不错。
尽情享受吧!
在获取用户位置授权时添加以下代码。因为苹果改变了默认的 allowsBackgroundLocationUpdates NO 从 iOS9.
'if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
locationManager.allowsBackgroundLocationUpdates = YES;
}'
我的应用通过以下方式监控用户位置更新(不一定是重大位置变化):
someLocationManager = [[CLLocationManager alloc] init];
[someLocationManager setDelegate:self];
[someLocationManager startUpdatingLocation];
当应用程序(在模拟器中)在前台时一切正常,但是当它暂停到后台(不终止)时,我在日志中收到此错误:
Can't endBackgroundTask: no background task exists with identifier *, or it may have already been ended
此错误的所有其他答案都与定位服务无关,只是一般的后台任务问题。
因此看来应该进行以下 3 项设置才能使后台位置更新正常工作。 这样做并解决问题:
- 在
info.plist
. 中设置 - 确保在请求许可时调用
[someLocationManager requestAlwaysAuthorization];
。 - 在目标设置的
Capabilities
部分的Background Modes
中启用Location Updates
。不确定这个,但听起来不错。
NSLocationAlwaysUsageDescription
密钥(以值作为许可的原因)
尽情享受吧!
在获取用户位置授权时添加以下代码。因为苹果改变了默认的 allowsBackgroundLocationUpdates NO 从 iOS9.
'if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
locationManager.allowsBackgroundLocationUpdates = YES;
}'