仅有时在 iOS 后台更新位置
Posted
技术标签:
【中文标题】仅有时在 iOS 后台更新位置【英文标题】:Update location in background on iOS only sometimes 【发布时间】:2014-12-17 14:51:42 【问题描述】:我正在开发一个使用位置的应用程序。应用程序可以在地图上保存路线,如果用户想要记录路线,应用程序必须在后台存储用户位置,然后在地图上显示。
为了在后台保存位置,我使用了应用程序 plist 中定义的属性 NSLocationAlwaysUsageDescription
我的问题是用户可能永远不想记录任何路线,但由于我定义应用程序必须在后台存储位置的方式,我的应用程序似乎总是在后台工作,而且浪费了很多即使在不需要在后台工作时也可以使用电池。
我还在我的 viewDidAppear 和 viewDidDisappear 方法上开始和停止位置更新,以避免在我不在地图屏幕上时更新位置:
- (void)viewDidAppear:(BOOL)animated
...
[[SBLocationManager sharedInstance] startUpdatingLocation];
...
- (void)viewDidDisappear:(BOOL)animated
[[SBLocationManager sharedInstance] stopUpdatingLocation];
[self.stationProvider stopProviding];
我一直在寻找这个,但我没有找到一种方法来在我想要的时候打开/关闭背景位置。 您知道是否有一种方法可以在您使用应用程序时在后台“启用/禁用”位置以让用户对其进行配置?
非常感谢您的帮助 :) 在这里见!
【问题讨论】:
您可以在应用通知位置更新之前配置位置的距离变化吗? 如果您在视图消失时停止更新位置,那么您希望如何在后台更新位置? 你有 distanceFilter、desiredAccuracy、deferredLocationUpdates 和一百万个其他选项,你最好阅读文档并选择最想要的方式:developer.apple.com/library/ios/documentation/CoreLocation/… @Thais:希望这会有所帮助:***.com/questions/19042894/… 嗨!我一直在测试添加一些关于昨天@Mrunal 帖子问题的更改,我发现一些更改似乎可以改善电池问题,但我必须对其进行测试以检测是否足够。我将所做的更改发布为第一篇文章的更新 【参考方案1】:将此添加为答案,以便其他人有类似查询时可以参考。
这是类似的问题 Periodic iOS background location updates
为了防止电池寿命,它需要根据我们的要求打开 - 关闭位置更新。还有一些属性,desiredAccuracy 和 distanceFilter 可以这样设置,这样就不会频繁调用位置服务。 (如给定链接中所述)
希望这会有所帮助。
【讨论】:
【参考方案2】:我一直在根据我在帖子上得到的答案进行一些更改,这让我对我的应用程序的电池浪费有了一点改善,我必须测试是否足够或者我是否可以更改其他内容,但在这里如果对某人有用的话,我做了哪些改进:
我更改了 startUpdatingLocation 和 stopUpdatingLocation viewDidAppear 和 viewDidDisappear:
- (void)viewDidAppear:(BOOL)animated
...
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[self.locationManager setDistanceFilter:kCLDistanceFilterNone];
...
- (void)viewDidDisappear:(BOOL)animated
...
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyThreeKilometers];
[self.locationManager setDistanceFilter:99999];
...
我向我的 locationManager 添加了两个属性以节省电池:
_locationManager.pausesLocationUpdatesAutomatically = YES;
_locationManager.activityType = CLActivityTypeOtherNavigation;
当您从地图视图关闭应用程序时,我发现一个错误阻止位置停止,因为没有调用 viewDidDisappear 和 stopUpdatingLocation。因此,我在以下位置添加了该内容:
- (void)applicationDidEnterBackground:(UIApplication *)application
[self.locationManager stopUpdatingLocation];
...
我希望这对你也有用:) 谢谢大家的帮助!
【讨论】:
以上是关于仅有时在 iOS 后台更新位置的主要内容,如果未能解决你的问题,请参考以下文章
为啥即使我在后台请求位置更新,我的 iOS 应用程序也会被杀死?