2016-08-25 91 views
0

一次我創建的位置經理iOS的位置管理器更新更多的時候則在第二

locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation 

但每秒接收一次位置更新。 是否有可能更頻繁地獲取更新?

我試圖在計時器中獲取當前位置,但它仍然每秒更新一次。

回答

1

這裏就是我所做的:

[self pingLocation];//viewDidLoad 

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 

    [manager stopUpdatingLocation]; 
    manager.delegate = nil; 
    self.currentLocation = (CLLocation *)[locations lastObject]; 

} 

- (void) pingLocation { 
    [locationManager startUpdatingLocation]; 
    locationManager.delegate = self; 
    [self performSelector:@selector(pingLocation) withObject:nil afterDelay:0.5];//change to whatever you want 
} 

這似乎給了我相當不錯的結果,並可以使它比更新每秒一次。然而,它耗盡電池非常劇烈,並不是最佳做法。我會問自己:你爲什麼要這樣?你真的需要每秒更新一次嗎?

編輯:我剛剛再次測試這一點,我相信儘管它每半秒更新一次,但它並不是真的。例如:

30.00000,60.00000

30.00000,60.00000

30.00032,60.00056

30.00032,60.00056

因此,你真的不能比更新第二快,遺憾地說。

+0

不幸的是,看起來你是對的。我用計時器重新創建測試 - 結果相同。試圖更經常地向經理詢問當前位置,而不是爲更新而努力 - 同樣的。這似乎是奇怪的做法,因爲在高速位置可能會發生巨大變化。 我的目標是測量10米的主機距離,所以時間間隔很重要。 – famer

1

按照CLLocation.startUpdatingLocation文檔:

相繼調用此方法多次確實產生不自動 結果在新的事件。然而,在 之間調用stopUpdatingLocation確實會導致在您調用此方法的下一個 時發送新的初始事件。

您可能還必須將distanceFilter設置爲無。但是,你可以想象這兩個將幫助通過電池流失。

+0

不幸的是,它並沒有更新位置本身,我嘗試了以及在下面的答案,它只是多次發送相同的位置。唯一沒有嘗試的是將'distanceFilter'設置爲none,因爲這是不可能的:根本就不設置它。 – famer

+0

通過說'無',我並不是說沒有設置它,我的意思是把它設置爲none - 'kCLDistanceFilterNone' – Michael

0
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    [locationManager startUpdatingLocation]; 
} 

由此,位置管理得到更新更頻繁。因爲每次更新時都會經常請求另一個位置。

相關問題