gpt4 book ai didi

iOS Location Manager 后台更新在 iOS 10 中停止

转载 作者:可可西里 更新时间:2023-11-01 17:14:10 29 4
gpt4 key购买 nike

我有一个健身应用程序可以接收位置更新,并且自 iOS 4 以来一直在后台运行良好。我刚刚注意到,当应用程序在 iOS 中移至后台(切换应用程序或锁定设备)时,位置更新现在停止了10. 未发现任何功能或后台权限变更通知;有谁知道发生了什么事吗?

我的位置设置非常基本:

if (!self.locationManager) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;

self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone;

self.locationManager.activityType = CLActivityTypeFitness;
self.locationManager.pausesLocationUpdatesAutomatically = TRUE;
}

// request permissions on iOS 8+
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.locationManager requestWhenInUseAuthorization];
}

然后这个回调接收更新:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
DLog(@"didUpdateToLocation");
}

当应用程序在前台时,一切都很好。一旦它移到后台,此消息就会出现在控制台中:

/BuildRoot/Library/Caches/com.apple.xbs/Sources/ExternalAccessory/ExternalAccessory-353.22.1/EAAccessoryManager.m:__52-[EAAccessoryManager _checkForConnectedAccessories:]_block_invoke-785 ending background task

然后停止更新。当我将应用程序带到前台时,它们会再次恢复。

我没有直接使用 EAAccessoryManager,只能猜测它是什么。我正在使用 BluetoothLE 框架从心率监测器接收数据,但是当我禁用此功能(停止实例化 BluetoothLE 对象)时,问题仍然存在。

我的 UIBackgroundModes 被设置为 locationexternal-accessorybluetooth-central 因为我还有 Pebble watch 连接。我尝试添加 bluetooth-peripheral 但这没有帮助。我还设置了 NSLocationWhenInUseUsageDescriptionNSBluetoothPeripheralUsageDescription 并且它们正在工作。

最佳答案

iOS 9 中的 CLLocationManager 添加了一个新属性 - allowsBackgroundUpdates .此属性默认为 false,如果您想在后台接收位置更新,则必须明确设置为 true

针对 iOS 8 SDK 构建的应用程序获得了 祖父 功能,即使没有设置此属性也能继续接收后台更新。

关于iOS Location Manager 后台更新在 iOS 10 中停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567272/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com