繁体   English   中英

iOS位置管理器多次触发

[英]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的示例代码。 希望对您有所帮助。

位置管理器通常有多种方法来确定您的位置,包括:

  • 细胞塔三角剖分;
  • wifi网络识别;
  • 全球定位系统。

第一个是最不准确的,但最容易获得,第二个通常更准确,但是要花一点时间(因为有网络请求查找),最后一个最准确,但要花很长时间才能找到出去(搜索卫星等)。

结果,预期的行为是,位置管理器保持运行的时间越长,其响应就会越准确。 例如,在运行Maps时,您会看到这种结果–通常会很快将您锁定在相当宽的区域,然后花费一些时间来获得更准确的估算值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM