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:
方法中,CLLocationManager
的distanceFilter
属性根据速度被重置,在iOS 9
中,这似乎触发了新的位置更新(返回最后一个已知位置),从而导致在几秒钟内更新数百个新位置。
【讨论】:
有趣。只要有能力,您应该接受自己的答案,以便其他读者知道问题已解决。 我看到了同样的结果,但在启动后我没有对 locationmanager 进行任何更改。你能看看***.com/questions/32838488/…吗? @SjoerdPerfors 我认为我们与CLLocationManager
的问题有点不同,我的问题与错误的位置数据无关,而是非常频繁更新。以上是关于iOS 9 - LocationManager 更新位置过于频繁的主要内容,如果未能解决你的问题,请参考以下文章
iOS locationmanager didChangeAuthorizationStatus 未从 kCLAuthorizationStatusDenied 调用到 kCLAuthorizatio
iOS LocationManager 未更新位置(Titanium Appcelerator 模块)