我正在处理使用位置的应用程序。应用程序可以在地图上保存路线,如果用户想要记录路线,则应用程序必须处理存储用户位置的背景,然后在地图上显示该位置。
要在背景上保存位置,我使用了在应用程序的plist上定义的属性NSLocationAlwaysUsageDescription
我的问题是,用户可能永远不想记录任何路线,但由于我定义应用程序必须在后台存储位置的方式,我的应用程序似乎始终在背景,即使没有必要在背景上工作,它也浪费了很多电池。
我也开始和停止更新viewDidAppear和viewDidDisappear方法上的位置,以避免在我不在地图屏幕上时更新位置:
- (void)viewDidAppear:(BOOL)animated
{
...
[[SBLocationManager sharedInstance] startUpdatingLocation];
...
}
- (void)viewDidDisappear:(BOOL)animated
{
[[SBLocationManager sharedInstance] stopUpdatingLocation];
[self.stationProvider stopProviding];
}
我一直在寻找这个但是我找不到一种方法可以在我想要的时候开启/关闭背景位置。 你知道吗?是否有办法启用/禁用"当你在应用程序上让用户配置它时背景上的位置?
非常感谢你的帮助:) 在这里见!
答案 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];
...
}
我希望这对你也有用:)谢谢大家的帮助!