CLLocationManager 提供旧位置。如何获得新位置?
Posted
技术标签:
【中文标题】CLLocationManager 提供旧位置。如何获得新位置?【英文标题】:CLLocationManger gives old location. How to get the new location? 【发布时间】:2009-10-30 08:02:04 【问题描述】:我正在使用 CLLocationManger 来更新当前位置。虽然它给了我位置,但我得到的位置是更旧的时间戳。我面临的问题是,如何强制位置控制器更新新位置而不是缓存位置。
目前我正在使用这个教程......
http://www.mobileorchard.com/hello-there-a-corelocation-tutorial/
有人知道如何更新当前时间戳而不是缓存的位置吗?
【问题讨论】:
【参考方案1】:您是在模拟器上还是在 iPhone 上运行您的项目?如果您在模拟器上运行项目,那么
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
只会被调用一次。
如果您在设备上进行测试,那么每次更改位置时都应该调用它。
确保您已设置位置管理器属性,
locationManager.delegate=self;
[locationManager startUpdatingLocation];
希望对您有所帮助...
【讨论】:
【参考方案2】:你可以使用这个方法
- (IBAction)update
locmanager = [[CLLocationManager alloc] init];
[locmanager setDelegate:self];
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];
NSLog(@"*********this is location update method of login view controller");
[locmanager startUpdatingLocation];
-(void)awakeFromNib
[self update];
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
if (wasFound) return;
wasFound = YES;
CLLocationCoordinate2D loc = [newLocation coordinate];
lat2 = [[NSString stringWithFormat: @"%f", loc.latitude]retain];
logg2= [[NSString stringWithFormat: @"%f", loc.longitude]retain];
NSLog(@"latitude is %@",lat2);
NSLog(@"longitude is %@",logg2);
在 viewdidload 方法中使用 perform 选择器调用更新方法。这里 lat2 和 logg2 是字符串值。 如果问题无法解决,请输入如何在 google 中查找当前位置。您将获得许多示例源代码并附有说明
【讨论】:
【参考方案3】:您能做的最好的事情就是丢弃那些按照您决定为您的应用设置的任何标准来说太旧的位置。重新启动位置管理器应该告诉系统您想要一个新位置,但通常您返回的第一个位置可能是它最后的位置。检查时间戳可能是您所能做的,但要为您可能永远无法获得更新位置的可能性做好准备。根据我的经验,如果设备没有移动,如果它检测到当前位置足够好,它永远不会用新位置更新系统。
【讨论】:
以上是关于CLLocationManager 提供旧位置。如何获得新位置?的主要内容,如果未能解决你的问题,请参考以下文章
核心位置,是不是可以在没有 GPS 芯片的情况下向 iPad 提供 GPS/位置日期,以便在 CLLocationManager 类中使用?