iOS 9 - LocationManager 更新位置过于频繁
iOS 9 - LocationManager updating locations too frequently
我正在迁移一个现有的应用程序以使用 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 发生了忽略距离过滤器的变化?
在 locationManager:didUpdateLocations:
方法中,CLLocationManager
的 distanceFilter
属性 正在根据速度进行重置,在 iOS 9
中,这似乎触发了新位置更新(返回最后一个已知位置),从而在几秒钟内产生数百个新位置更新。
我正在迁移一个现有的应用程序以使用 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 发生了忽略距离过滤器的变化?
在 locationManager:didUpdateLocations:
方法中,CLLocationManager
的 distanceFilter
属性 正在根据速度进行重置,在 iOS 9
中,这似乎触发了新位置更新(返回最后一个已知位置),从而在几秒钟内产生数百个新位置更新。