核心位置:从kCLDistanceFilterNone切换startMonitoringSignificantLocationChanges

时间:2012-03-04 03:37:36

标签: iphone core-location

为了节省电池,我监控位置更新以查看用户是否已经静止了一段时间;如果是这样,我会将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];
        }

2 个答案:

答案 0 :(得分:1)

来自文档:

  

startMonitoringSignificantLocationChanges不依赖distanceFilter属性中的值来生成事件

使用计时器停止并启动位置更新,而不是使用startMonitoringSignificantLocationChanges

您还可以尝试关闭位置更新,然后使用startMonitoringSignificantLocationChanges将其重新打开。不要忘记,这将使系统在检测到重大位置更改后终止应用程序。它看起来并不像你真正想要的那样。

答案 1 :(得分:1)

实际上,问题中编辑的代码有效。它允许系统根据需要从“恒定位置流”到“偶尔更新”来回。

我认为我的初步测试不够激进,文档并没有真正讨论使用这两种技术,而是想象一个只需要导航或重大更改的应用程序。