[英]iOS location manager firing off multiple times
首先,我是iOS Dev和Objective-C的新手。 因此,请原谅任何愚蠢的问题或代码。
我一直在测试iPhone上的定位服务。 我有一个由NSTimer触发的代码:
- (void)startLocationTracking
{
if(self.locationManager==nil){
_locationManager=[[CLLocationManager alloc] init];
_locationManager.delegate=self;
_locationManager.desiredAccuracy=kCLLocationAccuracyBest;
_locationManager.distanceFilter=1;
self.locationManager=_locationManager;
}
if([CLLocationManager locationServicesEnabled]){
[self.locationManager startUpdatingLocation];
}
}
这是我的位置管理器功能:
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
[self timerLog];
NSString *deviceID = [self getUUID];
double lat = newLocation.coordinate.latitude;
double lon = newLocation.coordinate.longitude;
double alt = newLocation.altitude;
double dir = newLocation.course;
double spd = newLocation.speed;
double ha = newLocation.horizontalAccuracy;
double va = newLocation.verticalAccuracy;
NSDateFormatter *formatter;
NSString *ts;
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
ts = [formatter stringFromDate:[NSDate date]];
[self geoTrackingWS :deviceID :lat :lon :alt :dir :spd :ha :va :ts];
[manager stopUpdatingLocation];
}
由于某种原因,我的函数geoTrackingWS
随机触发了多次。 NSTimer每1分钟运行一次(仅作为测试),有时它可以正常运行,并且只调用一次geoTrackingWS
,而其他时候则达到2或3次。
我已经完成了日志记录,我可以看到我的NSTimer运行正常并且可以正常启动。
我感觉它与手机上的另一个应用程序有关,但我不确定。
对此的任何帮助或见识都将是巨大的。
谢谢
您可能不希望创建一个新的CLLocationManager实例不止一次,而从计时器调用-startLocationTracking会这样做。 从代码的外观来看,我认为您只想调用一次-startLocationTracking,然后位置API在有新信息时会将消息发送给您的委托(您已将其指定为self)。 您可能想重新了解委托模式,并查看一些使用CLLocationManager的示例代码。 希望对您有所帮助。
位置管理器通常有多种方法来确定您的位置,包括:
第一个是最不准确的,但最容易获得,第二个通常更准确,但是要花一点时间(因为有网络请求查找),最后一个最准确,但要花很长时间才能找到出去(搜索卫星等)。
结果,预期的行为是,位置管理器保持运行的时间越长,其响应就会越准确。 例如,在运行Maps时,您会看到这种结果–通常会很快将您锁定在相当宽的区域,然后花费一些时间来获得更准确的估算值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.