0

我正在使用 CoreLocation 框架,我很好奇它多久更新一次,它真的不准确,我正在争论从 NSTimer 调用该方法以增加其使用频率。我的代码在下面

在 ViewDidLoad

//location update
CLController = [[CoreLocationController alloc] init];
CLController.delegate = self;
[CLController.locMgr startUpdatingLocation];

我的无效方法

- (void)locationUpdate:(CLLocation *)location {

    int speedInt = [location speed]*2.23693629;
    if(speedInt < 0){
        speedInt = 0;
    }
    speedLabel.text = [NSString stringWithFormat:@"%d", speedInt];
}

- (void)locationError:(NSError *)error {
    speedLabel.text = [error description];
}
4

3 回答 3

6

更新频率由desiredAccuracy和的组合决定distanceFilter(显然,用户移动了多少)。A distanceFilterofkCLDistanceFilterNonedesiredAccuracyof kCLLocationAccuracyBestorkCLLocationAccuracyBestForNavigation将为您提供最多的更新(但最快耗尽您的电池)。

使用 aNSTimer不会获得更高的准确性。依靠CLLocationManager以所需的频率进行更新,对应用程序的要求和用户不想不必要地耗尽他或她的电池的愿望之间的合理平衡有一定的敏感性。

请参阅位置感知编程指南的启动标准位置服务部分。另请参阅该指南中的“节省电池电量提示”部分。

于 2013-06-16T14:14:47.510 回答
2

您可以将 CLLocationManager 的 desiredAccuracy 属性分配给 kCLLocationAccuracyBest:

- (void) viewDidLoad
{
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate= self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [self.locationManager startUpdatingLocation];
} 

希望这可以帮助你。

于 2013-06-16T14:11:24.847 回答
0

按照您的代码意识,您可以添加以下内容:

CLController.locMgr.desiredAccuracy = kCLLocationAccuracyBest;
CLController.locMgr.distanceFilter  = 10.0f; //To set updating distance up with x meter when you leaved the scope.
[CLController.locMgr startUpdatingLocation];

希望它可以帮助你。

于 2013-06-16T15:13:12.217 回答