iOS 9 - LocationManager 更新位置过于频繁

Posted

技术标签:

【中文标题】iOS 9 - LocationManager 更新位置过于频繁【英文标题】:iOS 9 - LocationManager updating locations too frequently 【发布时间】:2015-09-25 16:25:17 【问题描述】:

我正在迁移现有应用程序以与 ios 9 一起使用,没有太多改变,但将 ATS 添加到 info.plist 并使用 MKAnnotationView 而不是 MKPinAnnotationView 用于地图上的自定义图钉。问题是在开始测试更改时,我注意到位置更新过于频繁,即使我站着不动。位置管理器的初始化方式没有任何改变。

这是日志的一个小样本。

2015-09-25 12:16:25.462 MyApp[2009:911066] location: <+39.09040164,-77.52540765> +/- 65.00m (speed -1.00 mps / course -1.00) @ 9/25/15, 12:16:25 PM Eastern Daylight Time 

2015-09-25 12:16:25.464 MyApp[2009:911066] location: <+39.09040164,-77.52540765> +/- 65.00m (speed -1.00 mps / course -1.00) @ 9/25/15, 12:16:25 PM Eastern Daylight Time 

2015-09-25 12:16:25.468 MyApp[2009:911066] location: <+39.09040164,-77.52540765> +/- 65.00m (speed -1.00 mps / course -1.00) @ 9/25/15, 12:16:25 PM Eastern Daylight Time 

2015-09-25 12:16:25.475 MyApp[2009:911066] location: <+39.09040164,-77.52540765> +/- 65.00m (speed -1.00 mps / course -1.00) @ 9/25/15, 12:16:25 PM Eastern Daylight Time 

位置管理器是这样设置的

    locationManager = [CLLocationManager new];

    locationManager.delegate = self;
    locationManager.distanceFilter = 25.0f;
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

    if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
       [locationManager requestAlwaysAuthorization];
    
    [locationManager startUpdatingLocation];

我想问题是:我的实现是否有问题,或者核心位置 API 中是否存在忽略距离过滤器的更改?

【问题讨论】:

CLLocationManager 上的属性pausesLocationUpdatesAutomatically 是否设置为YES?如果设置为YES,如果位置数据不太可能发生变化,它会通过禁用位置更新来帮助延长电池寿命。 @MatteoPacini 在代码中的任何时候都不会设置为NO,默认值为YES。我将尝试将其显式设置为YES。谢谢。 @MatteoPacini 我试过了,没有任何区别。谢谢你。 【参考方案1】:

locationManager:didUpdateLocations: 方法中,CLLocationManagerdistanceFilter 属性根据速度被重置,在iOS 9 中,这似乎触发了新的位置更新(返回最后一个已知位置),从而导致在几秒钟内更新数百个新位置。

【讨论】:

有趣。只要有能力,您应该接受自己的答案,以便其他读者知道问题已解决。 我看到了同样的结果,但在启动后我没有对 locationmanager 进行任何更改。你能看看***.com/questions/32838488/…吗? @SjoerdPerfors 我认为我们与CLLocationManager 的问题有点不同,我的问题与错误的位置数据无关,而是非常频繁更新。

以上是关于iOS 9 - LocationManager 更新位置过于频繁的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中使定位更准确?

iOS locationmanager didChangeAuthorizationStatus 未从 kCLAuthorizationStatusDenied 调用到 kCLAuthorizatio

iOS LocationManager 未更新位置(Titanium Appcelerator 模块)

locationManager 后台续航

iOS 8 中的 didEnterRegion - 区域监控

locationManager.location 返回 nil