2016-08-25 90 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]; 
} 

由此,位置管理得到更新更频繁。因为每次更新时都会经常请求另一个位置。

相关问题