2013-06-05 55 views
3

我有一個應用程序,使一個調用來獲取用戶的位置:什麼時候應該停止更新位置管理器?

-(void)getLocation{ 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    [locationManager startUpdatingLocation]; 

} 
//SET USER LOCATION 
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    self.userLocation = [locations lastObject]; 
    NSLog(@"location in IntroVC %f, %f", self.userLocation.coordinate.latitude, self.userLocation.coordinate.longitude); 
} 

我的問題是,因爲那的NSLog保持無限吐出一個新的位置,當我應該停止調用的位置?那麼我想它真的取決於我的應用程序的功能,但不會導致電池消耗?如果是這樣,我應該看看停止更新的最佳方法。

回答

10

位置管理器的距離過濾器設置爲kCLDistanceFilterNone。這會導致didUpdateLocations方法被稱爲無限時間。

locationManager.distanceFilter = kCLDistanceFilterNone; 

更改此行

locationManager.distanceFilter = 10; 

,然後再試一次。根據需要更改值。

所以現在didUpdateLocation不會被稱爲無限次。 :)

希望這有助於。

0

根據您的應用程序的性質,您可能希望在進入後臺或屏幕鎖定時關閉位置服務。這些通知掛鉤通常在您的應用程序代理文件中提供(.m)。是的你是對的,位置服務顯着消耗電池,它是一個強烈推薦的做法,使用位置服務的iOS應用程序謹慎使用它。

蘋果似乎已經想到了這一點,並提供了一個API,只有當用戶「顯着」移動Apple the significant change location service時纔會通知該應用程序。 「顯着移動」的定義取決於WiFi的可用性,手機信號塔可用性,GPS可用性等各個方面的不同而變化。幸運的是,所有這些在這個API中被混淆了。

0

我在didupdateloactions中更新位置後調用此方法,所以當我的應用在後臺運行時,它會從頂部狀態欄中刪除位置圖標。

相關問題