首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS位置管理器后台更新在iOS 10中停止

iOS位置管理器后台更新在iOS 10中停止
EN

Stack Overflow用户
提问于 2016-11-12 20:22:48
回答 1查看 1.2K关注 0票数 3

我有一款健身应用程序,它可以接收位置更新,并且从iOS 4开始在后台运行良好。我只是注意到,当应用移动到iOS 10中的后台(切换应用程序或锁定设备)时,位置更新就停止了。我没有发现任何功能或后台权限更改的通知;有人知道发生了什么事吗?

我的位置设置非常基本:

代码语言:javascript
复制
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];
}

然后,此回调将接收更新:

代码语言:javascript
复制
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    DLog(@"didUpdateToLocation");
}

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

代码语言:javascript
复制
/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,因为我还有鹅卵石手表连接。我试着添加bluetooth-peripheral,但这没有帮助。我也有NSLocationWhenInUseUsageDescriptionNSBluetoothPeripheralUsageDescription集,它们都在工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-13 01:09:04

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40567272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档