ios - CLLocationManagerdesiredAccuracy of kCLLocationAccuracyHundredMeters 导致位置更新非常不频繁

标签 ios objective-c cllocationmanager cllocation

我正在尝试使用 kCLLocationAccuracyHundredMeters 的位置精度来更新我的应用程序中的标准位置,这似乎在一段时间内效果相对较好,但每隔一段时间我就会收到 10 分钟的消息更新之间的间隙(在不同方向行驶数英里时)这似乎不符合该设置的特征。这是我的位置管理器上的设置。另外,我只使用前台位置更新,因此对于这些测试,我始终让屏幕处于前台,并且应用程序始终位于前台。

self.locManager = [[CLLocationManager alloc] init];
self.locManager.delegate = self;
self.locManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
self.locManager.distanceFilter = 15;

我使用相同的其他设置尝试了 kCLLocationAccuracyBest,并且在整个驾驶过程中获得了完美的测量结果,但我不需要那么准确的位置。我认为百米精度仍然会提供相对一致的更新,但精度较低,这正是我们所寻求的。

这是否只是使用 kCLLocationAccuracyHundredMeters 设置与 kCLLocationAccuracyBest 相比的副作用?

在 iPhone 6s 上测试:11.0.2 和 iPhone 7Plus:11.0.3

感谢任何帮助,谢谢!

编辑:

我应该澄清一下,我在下面列出的 CLLocationManager 委托(delegate)方法中设置了日志记录,但从未收到任何回调/日志。

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error;
- (void)locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(nullable NSError *)error;
- (void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager;
- (void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager;

最佳答案

当您询问 kCLLocationAccuracyHundredMeters 时,iPhone 根本不使用 GPS,而是依靠手机信号塔和 WiFi 接入点进行三角测量。这意味着 iPhone 会根据 WiFi 扫描的频率更新位置,而这种频率远非连续的。如果您远离 Wi-Fi 覆盖的区域,手机信号塔将成为您唯一的来源,并且只有在手机信号塔之间切换时您才可能开始获取位置更新。

简而言之:

  • 设置准确性告诉 iOS 使用哪个硬件,

  • 距离过滤器告诉 iOS 在用新数据唤醒 CPU 之前要移动多远

关于ios - CLLocationManagerdesiredAccuracy of kCLLocationAccuracyHundredMeters 导致位置更新非常不频繁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46963332/

相关文章:

ios - Restkit v0.20动态映射到NSDictionary

objective-c - UIViewReportBrokenSuperviewChain

ios - 获取用户位置不起作用?

swift - 最小化使用 LocationManager 时对我的服务器发出的 HTTP 请求

objective-c - iOS 9 - 位置更新出现错误 didFailWithError : Error Domain=kCLErrorDomain Code=0 "(null)"

ios - SKAction playSoundFileNamed ERROR

ios - 如何测量 iOS 中的延迟

ios - 找不到合适的方法来覆盖 RowsInSection xamarin

objective-c - 运行 genstrings 命令时出现错误 "Argument is not a literal String"

ios - Swift - 桥接头失败。 '*' 没有名为 '*' 的成员