2012-03-04 107 views
1

为了节省电量,我监控位置更新以查看用户是否已静止一段时间;如果是这样,我然后将CLLocationManager从其主要设置kCLLocationAccuracyBestForNavigation和kCLDistanceFilterNone(最大设置)降级到仅监视重大位置更改。核心位置:切换启动监控重要位置从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

你是如何测试的?通过文件设备通过检测小区塔ID(GSM)的变化来判定存在显着的位置变化。退房还http://stackoverflow.com/questions/8290707/startmonitoringsignificantlocationchanges-lack-of-准确 – 2012-03-04 08:18:05

+0

是的,似乎我不允许塔改变,所以从来没有更新,错误地假设整个系统是禁用。 – SG1 2012-03-04 16:41:07

回答

1

其实编码问题的编号确实是的工作。它允许系统根据需要从“固定位置流”到“偶尔更新”来回移动。

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

1

从文档:

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

而不是使用startMonitoringSignificantLocationChanges,使用计时器停止并开始位置更新。

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

+0

由于许多原因,使用定时器通常是最后的选择。你的第二个建议虽然基本上是我试图完成的,而且看起来代码发布实际上是*做*做到这一点。谢谢。 – SG1 2012-03-04 16:43:23