iOS位置管理器会更频繁地更新,然后每秒更新一次

时间:2016-08-25 02:38:59

标签: ios swift location core-location cllocationmanager

我用

创建了位置管理器
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation

但是每秒收到一次位置更新。 是否有可能更频繁地获得更新?

我试图在计时器中获取当前位置,但它仍然每秒更新一次。

3 个答案:

答案 0 :(得分: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

因此,你真的无法快速更新,不好说。

答案 1 :(得分:1)

根据CLLocation.startUpdatingLocation文档:

  

连续几次调用此方法不会自动进行   导致生成新事件。呼叫stopUpdatingLocation   但是,之间确实会导致下一个新的初始事件发送   你打电话给这种方法的时间。

您可能还必须将distanceFilter设置为无。但是,你可以想象这两个将有助于通过电池搅拌。

答案 2 :(得分:0)

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

通过这种方式,位置管理可以更频繁地进行更新。因为每次获得更新时,它都会经常请求另一个位置。