StartUpdatingLocation与重要更改位置服务

我有关于重大变更位置服务的问题。

Apple文档说“无论您使用标准位置服务还是重要更改位置服务来获取位置事件,您收到这些事件的方式都是相同的。”

但是在“重大变更位置服务”的情况下,我无法获得任何“标准位置服务”的回复。如果有人有任何意见,请告诉我?

startUpdatingLocation在第一次调用时更新位置,然后在距离filter值超过时更新。

但是当发生重大位置变化时, startMonitoringSignificantLocationChanges

请检查CLLocationManager以获取详细信息。

startUpdatingLocation

开始生成报告用户当前位置的更新。

- (void)startUpdatingLocation Discussion

此方法立即返回。 调用此方法会导致位置管理器获取初始位置修复(可能需要几秒钟)并通过调用其locationManager:didUpdateLocations:方法通知您的委托。 (在iOS 5及更早版本中,位置管理器调用locationManager:didUpdateToLocation:fromLocation:方法。)之后,接收器主要在超出distanceFilter属性值时生成更新事件。 但是,更新可能会在其他情况下提供。 例如,如果硬件收集更准确的位置读数,则接收器可以发送另一通知。

连续多次调用此方法不会自动导致生成新事件。 但是,在两者之间调用stopUpdatingLocation会导致在下次调用此方法时发送新的初始事件。

如果您启动此服务并且您的应用程序被挂起,系统将停止事件的传递,直到您的应用程序再次开始运行(在前台或后台)。 如果您的申请被终止,则新的地点事件的交付将完全停止。 因此,如果您的应用程序需要在后台接收位置事件,则必须在其Info.plist文件中包含UIBackgroundModes键(具有位置值)。

除了实现locationManager:didUpdateLocations:方法的委托对象之外,它还应该实现locationManager:didFailWithError:方法来响应潜在的错误。


startMonitoringSignificantLocationChanges

根据重要的位置更改开始生成更新。

- (void)startMonitoringSignificantLocationChanges Discussion

此方法异步启动位置事件的传递,在您调用它后不久返回。 位置事件将传递给您委托的locationManager:didUpdateLocations:方法。 要传递的第一个事件通常是最近缓存的位置事件(如果有),但在某些情况下可能是较新的事件。 获取当前位置修复可能需要几秒钟,因此请务必检查委托方法中位置事件的时间戳。

在返回当前位置修复之后,接收器仅在检测到用户位置的显着变化时才生成更新事件。 例如,当设备与不同的蜂窝塔相关联时,它可能会生成新事件。 它不依赖distanceFilter属性中的值来生成事件。 连续多次调用此方法不会自动导致生成新事件。 但是,在两者之间调用stopMonitoringSignificantLocationChanges会导致在下次调用此方法时发送新的初始事件。

如果您启动此服务并且您的应用程序随后终止,则系统会在新事件到达时自动将应用程序重新启动到后台。 在这种情况下,传递给locationManager的选项字典:didUpdateLocations:应用程序委托的方法包含密钥UIApplicationLaunchOptionsLocationKey,以指示您的应用程序是由于位置事件而启动的。 重新启动后,您仍必须配置位置管理器对象并调用此方法以继续接收位置事件。 重新启动位置服务时,会立即将当前事件传递给您的代理。 此外,即使在启动位置服务之前,也会使用最新的位置对象填充位置管理器对象的位置属性。

除了实现locationManager:didUpdateLocations:方法的委托对象之外,它还应该实现locationManager:didFailWithError:方法来响应潜在的错误。

注意 :只要设备从之前的通知移动500米或更长时间,应用就会收到通知。 它不应该比每五分钟更频繁地预期通知。 如果设备能够从网络检索数据,则位置管理器更有可能及时发送通知。