2011-06-05 73 views
2

在我的頭,我把CLLocationManager是給老位置

CLLocationManager *locationManager; 
@property (nonatomic, retain) CLLocationManager *locationManager; 

在我的實現文件:

- (void)viewDidLoad 
{ 
    self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
    self.locationManager.distanceFilter = 50.0f; 
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters]; 
    self.locationManager.delegate = self; 
    [locationManager startUpdatingLocation]; 
    [super viewDidLoad]; 
} 
的委託方法

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
     NSLog(@"Location: %g,%g", newLocation.coordinate.latitude, newLocation.coordinate.longitude); 

} 

現在我不斷收到老

然後經度和緯度值

用Google搜索的解決方案我無法找到任何,我不明白我在做什麼錯,

任何幫助,請

+0

這是在設備上還是模擬器? – 2011-06-05 18:58:50

回答

4

您可以使用位置的timestamp,以過濾太舊位置更新:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    if ([newLocation.timestamp timeIntervalSinceNow] < -60) return; // location is not fresh 
    ... 
} 
+0

但是,這樣做還是在同一個循環中。 – ialameh 2011-06-05 17:56:17

+0

沒有'distanceFilter'工作嗎? – albertamg 2011-06-05 18:09:28

+0

我試圖評論distanceFilter,但仍然相同 – ialameh 2011-06-05 18:20:22

2

從我的經驗,位置管理器將只接收一個位置更新當手機移動(大概是爲了延長電池壽命)。換句話說,如果電話在20分鐘前在某個位置接收到位置更新,並且電話尚未移動,則當您啓動位置服務時,它會將該舊值作爲「可接受」值返回給newLocation對象。

這就是爲什麼albertamg的建議被普遍應用的原因,但缺點是通過過濾掉這些「舊」更新,您可能會遇到無法檢測到靜止手機中的任何內容的風險。

希望這有助於=)

相關問題