CLLocationManager总是返回完全相同的位置



我试图设置一个新的CLLocation和CLRegion,但位置总是返回相同的坐标,无论我实际上在哪里。我的主UIViewController符合CLLocationManagerDelegate协议,就像一个自定义类一样。当自定义类初始化时,我将计时器设置为在0.25秒后触发,代码如下:

mainLocationManager = [[CLLocationManager alloc] init];
[mainLocationManager startUpdatingLocation];
location = [mainLocationManager location];
if (![location.timestamp isEqualToDate:[NSDate dateWithTimeIntervalSinceNow:0]]) { //filters cached data by updating location if cached data not recent enough
    location = [mainLocationManager location];
}
//Set up region
region = [[CLRegion alloc] initCircularRegionWithCenter:location.coordinate
                                                     radius:500
                                                 identifier:[NSString stringWithFormat:@"region:%@", locationName]];
NSLog(@"%@       %@", location, region);

代码似乎可以工作,除了坐标总是相同的值。我不知道如何改变这一点。任何帮助都很感激,谢谢!

位置管理器是一个异步框架。你不能调用startUpdatingLocation,然后立即期望位置管理器拥有用户的正确位置。

你必须将自己设置为位置管理器的委托,调用startUpdatingLocation,然后等待它调用你的locationManager:didUpdateToLocation:fromLocation:方法。实际上,您需要检查您获得的位置更新,并拒绝旧的、过时的位置信息或太不准确的位置更新(当您第一次打开位置更新时,您获得的第一个更新来自上次GPS激活时,有时是几小时或几天后的更新。接下来的更新是相当不准确的,直到GPS稳定下来并开始提供良好的读数。

为了使其工作,您需要实现委托:

locationManager:didUpdateLocations:

参见此处

正确用法:

如何在iOS中使用CLLocationManager获取当前位置

我想是因为你没有更新location by location manager delegate方法。

使用此方法获取更新位置

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
location_updated = [locations lastObject];    
NSLog(@"updated coordinate are %@",location_updated);
}

也在设备中测试。

相关内容

  • 没有找到相关文章

最新更新