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

3
我正在开发一个使用位置信息的应用程序。该应用程序可以在地图上保存路线,如果用户想记录路线,则必须在后台工作以存储用户位置,并在之后在地图上显示它。
为了在后台保存位置信息,我使用了应用程序plist中定义的NSLocationAlwaysUsageDescription属性。
我的问题是,用户可能永远不想记录任何路线,但由于我定义应用程序必须在后台存储位置的方式,我的应用程序似乎总是在后台工作,并且即使在没有必要在后台工作时也会耗费大量电池电量。
我还在viewDidAppear和viewDidDisappear方法中启动和停止位置更新,以避免在不在地图屏幕上时更新位置。
    - (void)viewDidAppear:(BOOL)animated
{
    ...

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

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

我一直在寻找方法,但是没有找到在需要时打开/关闭后台位置的方法。 您知道是否有一种方法可以在应用程序中启用/禁用背景位置,以便让用户进行配置吗?

非常感谢您的帮助 :) 再见!



@Andy 你是说当我将应用程序置于后台时更改距离吗? - Thais
@LarryBorsato 嗯,当我在地图上并且用户正在记录他的位置时,我每秒钟都会显示他的新位置并在地图上绘制它,并且我需要每次更新它。但是当应用程序关闭时,我会将位置存储在后台,但我不会每次都询问。当应用程序再次打开并且用户再次打开地图视图时,我获取在应用程序处于后台时存储的位置,并在地图上绘制路线。 - Thais
1
您有 distanceFilter、desiredAccuracy、deferredLocationUpdates 和无数其他选项,最好阅读文档并选择最理想的方式:https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/clm/CLLocationManager/deferredLocationUpdatesAvailable - pronebird
1
@Thais:希望这可以帮到你:https://dev59.com/q2Mk5IYBdhLWcg3wtQBd - Mrunal
1
嗨!我一直在测试添加一些更改,这些更改是昨天@Mrunal发布的问题中提到的。我发现了一些更改,似乎可以稍微改善电池的问题,但我必须好好测试一下,以确定是否足够。我将我所做的更改作为第一篇帖子的更新发布。 - Thais
显示剩余9条评论
2个回答

1

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

这里有一个类似的问题定期iOS后台位置更新

为了节省电池寿命,需要根据我们的要求打开-关闭位置更新。还有一些属性,例如desiredAccuracy和distanceFilter,可以设置为不频繁调用位置服务(如给定链接中所述)。

希望这可以帮助你。


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];
    ...
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接