2012-12-31 72 views
3

我目前正在開發其他開發人員的iOS應用程序。該應用程序需要監視位置變化,因爲它需要以低精度(百米)知道用戶位置。之前的位置信息的實現是使用NSTimerstartUpdatingLocation完成的。執行是這樣的:使用startMonitoringSignificantLocationChanges和NSTimer提高電池使用率

// Fire each 10 seconds start updating location 
self.timerPosition = [NSTimer scheduledTimerWithTimeInterval:ti 
                 target:self 
                selector:@selector(location) 
                userInfo:nil 
                repeats:YES]; 
[self.timerPosition fire]; 

地點選擇做這個

// Configure & check location services enabled 
... 
self.locman.delegate = self; 
self.locman.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
[self.locman startUpdatingLocation]; 

然後在外景經理代表

[manager stopUpdatingLocation]; 

但閱讀蘋果文檔獲取用戶的位置,它似乎用低功耗獲取位置的正確方法是使用startMonitoringSignificantLocationChanges

我的問題是,將位置計時器與startMonitoringSignificantLocationChanges而不是startUpdatingLocation結合使用是一個很好的決定,或者這是一種無意義的方法?

當應用程序處於後臺時,我不需要獲取位置,但是我想知道當應用程序處於活動狀態時用戶更改了位置。

+1

這是無稽之談。您應該使用significantLocationChanges或RegionMonitoring服務。如果不需要後臺支持,那麼我認爲significantLocationChanges可能是更好的方法 – Lefteris

回答

1

我可以告訴你,當你使用低功耗-startMonitoringSignificantLocationChanges時,定時器不能也不會被需要。該方法僅在設備檢測到更改時響應代理的回調。此位置檢查不使用GPS,它使用Wifi和已在發生的細胞塔三角測量。所以通過使用這種方法,不需要減慢速度以節省電池壽命。只需設置委託方法並作出相應的響應。

我不確定您的位置實施的目的是什麼,但區域監控也是另一種使用少量電池即可獲取位置更新的好方法。如果您有特定的位置進行監控,而不僅僅是一般用戶的位置,則區域監控會更有幫助。希望這可以解決問題。

+0

所以如果WiFi和手機信號塔發生變化,它會詢問位置。否則它是沉默的? –

+0

如果檢測到重大更改,它將ping所有偵聽更新的代表。因此,只有在檢測到重大更改時纔會更新代表。 –

+0

@BillBurgess我建立一個應用程序,記錄用戶旅行和即時通訊使用'StarUpdateLocation'方法來啓動gps。如果速度大於10km/s,旅程將開始,並將在早上8點停止服務。我需要在第二天上午10點再次開始追蹤。是使用startMonitoringSignificantLocationChanges的最佳方法嗎? –