有时仅在iOS上更新后台位置

时间:2014-12-17 14:51:42

标签: ios objective-c core-location

我正在处理使用位置的应用程序。应用程序可以在地图上保存路线,如果用户想要记录路线,则应用程序必须处理存储用户位置的背景,然后在地图上显示该位置。

要在背景上保存位置,我使用了在应用程序的plist上定义的属性NSLocationAlwaysUsageDescription

NSLocationAlwaysUsageDescription on the app plist

我的问题是,用户可能永远不想记录任何路线,但由于我定义应用程序必须在后台存储位置的方式,我的应用程序似乎始终在背景,即使没有必要在背景上工作,它也浪费了很多电池。

我也开始和停止更新viewDidAppear和viewDidDisappear方法上的位置,以避免在我不在地图屏幕上时更新位置:

    - (void)viewDidAppear:(BOOL)animated
{
    ...

    [[SBLocationManager sharedInstance] startUpdatingLocation];
    ...
}

- (void)viewDidDisappear:(BOOL)animated
{
    [[SBLocationManager sharedInstance] stopUpdatingLocation];
    [self.stationProvider stopProviding];
}

我一直在寻找这个但是我找不到一种方法可以在我想要的时候开启/关闭背景位置。 你知道吗?是否有办法启用/禁用"当你在应用程序上让用户配置它时背景上的位置?

非常感谢你的帮助:) 在这里见!


2 个答案:

答案 0 :(得分:1)

添加此作为答案,以便如果其他人有类似的查询,他们可以参考。

这是类似的问题 Periodic iOS background location updates

为了防止电池寿命,它需要根据我们的要求打开 - 关闭位置更新。此外,很少有属性,desiredAccuracy和distanceFilter可以这样设置,以便它不会经常调用位置服务。 (如给定链接中所述)

希望这有帮助。

答案 1 :(得分:0)

我根据帖子上的答案进行了一些更改,这些答案让我对应用程序上的电池浪费有了一些改进,我必须测试是否足够或者我是否可以更改其他内容,但是这里有我做过的改进,如果它对某人有用的话:

我更改了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];
    ...
}

我希望这对你也有用:)谢谢大家的帮助!