Iphone 核心位置:从kCLDistanceFilterNone向下切换开始监视重要位置更改

Iphone 核心位置:从kCLDistanceFilterNone向下切换开始监视重要位置更改,iphone,core-location,Iphone,Core Location,为了节省电池,我监测位置更新,看看用户是否已经静止了一段时间;如果是这样,那么我将CLLocationManager的主要设置kCLLocationAccuracyBestForNavigation和KClInstanceFilterOne(最大设置)降级为仅监视重大位置更改 问题是,它不起作用:在调用startMonitoringSignificantLocationChanges之后,位置更新继续以很高的速率涌入,就像调用之前一样 你如何让活动放松,然后再恢复 更新:此代码回答了以下问题:

为了节省电池,我监测位置更新,看看用户是否已经静止了一段时间;如果是这样,那么我将CLLocationManager的主要设置kCLLocationAccuracyBestForNavigation和KClInstanceFilterOne(最大设置)降级为仅监视重大位置更改

问题是,它不起作用:在调用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];
        }
//设置
如果(应监视重大更改更新){
NSLog(@“进入->重大变更模式”);
[self.locationManager停止更新位置];
[self.locationManager开始监视重要位置更改];//停止监视每个位置更改
}否则{
NSLog(@“正在从文档中退出:

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

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


您也可以尝试关闭位置更新,然后使用
startMonitoringSignificantLocationChanges
将其重新打开。不要忘记,当系统检测到显著的位置更改时,这将使系统在终止应用后启动您的应用。这看起来并不是您真正想要的。实际上,代码如下所示问题中的编辑确实有效。它允许系统根据需要从“固定位置流”到“偶尔更新”来回切换


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

您如何测试它?通过文档记录,设备通过检测基站ID的更改来确定位置发生了重大变化(GSM)是的,我似乎不允许塔楼更改,因此从未得到更新,错误地认为整个系统已被禁用。出于各种原因,使用计时器通常是最后的选择。不过,你的第二个建议基本上就是我试图实现的,而且发布的代码似乎确实起到了作用是的,谢谢。