仅有时在 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 应用程序也会被杀死?

在 iOS 后台更新位置

位置更新在后台停止 - iOS

在后台模式下接收 gps 位置更新 ??iOS 8

即使应用程序在后台运行,如何使用 swift 在 ios 中获取位置更新

iOS后台位置更新在一段时间后停止