为了节省电池,我监控位置更新以查看用户是否已经静止了一段时间;如果是这样,我会将CLLocationManager从其主要设置kCLLocationAccuracyBestForNavigation和kCLDistanceFilterNone(最大设置)降级到仅监控重要位置更改。
麻烦的是,它不起作用:在调用startMonitoringSignificantLocationChanges后,位置更新继续以高速率进行呼叫。
如何将活动降下来然后再次备份?
更新:此代码回答了问题:
//Set
if ( shouldMonitorSignificantChangeUpdates ) {
NSLog(@"Entering -> significant change mode");
[self.locationManager stopUpdatingLocation];
[self.locationManager startMonitoringSignificantLocationChanges]; //aka stop monitoring every location change
} else {
NSLog(@"Exiting <- significant change mode");
[self.locationManager stopMonitoringSignificantLocationChanges]; //aka begin monitoring every location change
[self.locationManager startUpdatingLocation];
}
答案 0 :(得分:1)
来自文档:
startMonitoringSignificantLocationChanges不依赖distanceFilter属性中的值来生成事件
使用计时器停止并启动位置更新,而不是使用startMonitoringSignificantLocationChanges
。
您还可以尝试关闭位置更新,然后使用startMonitoringSignificantLocationChanges
将其重新打开。不要忘记,这将使系统在检测到重大位置更改后终止应用程序。它看起来并不像你真正想要的那样。
答案 1 :(得分:1)
实际上,问题中编辑的代码有效。它允许系统根据需要从“恒定位置流”到“偶尔更新”来回。
我认为我的初步测试不够激进,文档并没有真正讨论使用这两种技术,而是想象一个只需要导航或重大更改的应用程序。