我遇到了关于显著位置变化服务的问题。
苹果文档中提到:“无论您使用标准位置服务还是显著位置变化服务来获取位置事件,接收这些事件的方式都是相同的。”
但是在“显著位置变化服务”的情况下,我无法像在“标准位置服务”中那样获得任何回调。请问是否有人有任何建议?
我遇到了关于显著位置变化服务的问题。
苹果文档中提到:“无论您使用标准位置服务还是显著位置变化服务来获取位置事件,接收这些事件的方式都是相同的。”
但是在“显著位置变化服务”的情况下,我无法像在“标准位置服务”中那样获得任何回调。请问是否有人有任何建议?
startUpdatingLocation
方法在第一次调用时会更新位置信息,之后当距离过滤器的值超过时也会更新。
而 startMonitoringSignificantLocationChanges
方法则是在位置发生显著变化时更新。
请查看CLLocationManager获取更多细节信息。
startUpdatingLocation
开始生成报告用户当前位置的更新。
- (void)startUpdatingLocation Discussion
此方法立即返回。调用此方法会导致位置管理器获取初始位置修复(可能需要几秒钟)并通过调用其locationManager:didUpdateLocations:方法通知您的代理。 (在iOS 5及更早版本中,位置管理器调用locationManager:didUpdateToLocation:fromLocation:方法。)之后,接收器主要在超出distanceFilter属性中的值时生成更新事件。然而,在其他情况下也可以传递更新。例如,如果硬件收集到更准确的位置读数,则接收器可能会发送另一个通知。
连续调用此方法多次不会自动生成新事件。但是,在两次调用之间调用stopUpdatingLocation会导致在下次调用此方法时发送新的初始事件。
如果启动此服务并且您的应用程序被挂起,则系统会停止传递事件,直到您的应用程序再次运行(无论是在前台还是后台)。如果终止您的应用程序,则停止传递新位置事件。因此,如果您的应用程序需要在后台接收位置事件,则必须在其Info.plist文件中包含UIBackgroundModes键(带有位置值)。
除了您的委托对象实现locationManager:didUpdateLocations:方法之外,它还应该实现locationManager:didFailWithError:方法以响应潜在错误。
- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
而不是locationManager:didUpdateLocations:
。我已经阅读了文档,并根据文档,对于两种类型的位置服务,接收这些事件的方式是相同的。你提到的方法适用于iOS 6及更高版本。我正在使用的方法从iOS 4开始支持。 - SagrianstartUpdatingLocation
和startMonitoringSignificantLocationChanges
吗? - irbananastartUpdatingLocation
,它将调用委托方法。在这种情况下,使用startMonitoringSignificantLocationChanges
没有任何意义。 - Midhun MP