2012-03-04 79 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