我遇到有关重大变更位置服务的问题。
Apple文档说“无论您使用标准位置服务还是重要更改位置服务来获取位置事件,您收到这些事件的方式都是相同的。”
但是在“重大变更位置服务”的情况下,我无法获得任何回调 我遇到“标准位置服务”如果有人有任何意见,请告诉我吗?
答案 0 :(得分:7)
startUpdatingLocation
在第一次调用时更新位置,然后在距离过滤器值超过时更新。
但是当发生重大位置变化时startMonitoringSignificantLocationChanges
。
请查看CLLocationManager了解详情。
<强> startUpdatingLocation 强>
开始生成报告用户当前的更新 位置。
- (void)startUpdatingLocation Discussion
此方法立即返回。调用此方法会导致 位置管理器获取初始位置修复(可能需要 几秒钟)并通过调用它来通知你的代表 locationManager:didUpdateLocations:方法。 (在iOS 5及更早版本中, 位置经理打电话给 locationManager:didUpdateToLocation:fromLocation:method。) 之后,接收器主要在生成时生成更新事件 distanceFilter属性中的值被超出。更新可能是 但在其他情况下交付。例如,接收器可以 如果硬件收集更准确,则发送另一个通知 位置阅读。
连续几次调用此方法不会自动进行 导致生成新事件。在中调用stopUpdatingLocation 但是,之间确实会导致下一个新的初始事件发送 你打电话给这种方法的时间。
如果您启动此服务并且您的应用程序被暂停,则 系统会停止事件的传递,直到您的应用程序启动 再次运行(在前台或后台)。如果你的 应用程序终止,新位置事件的交付停止 共。因此,如果您的应用程序需要接收位置 在后台的事件,它必须包括UIBackgroundModes 密钥(带位置值)在Info.plist文件中。
除了你的委托对象实现了 locationManager:didUpdateLocations:方法,它也应该实现 locationManager:didFailWithError:响应潜力的方法 错误。
<强> startMonitoringSignificantLocationChanges 强>
根据重要位置开始生成更新 变化。
- (void)startMonitoringSignificantLocationChanges Discussion
此方法异步启动位置事件的传递, 你打电话后不久回来。地点活动将发送至 你的委托的locationManager:didUpdateLocations:方法。首先 要交付的事件通常是最近缓存的位置 事件(如果有的话),但在某些情况下可能是较新的事件。 获取当前位置修复可能需要几秒钟, 所以一定要检查你的位置事件的时间戳 委托方法。
返回当前位置修复后,接收器会生成更新 仅当用户位置发生重大变化时才会发生事件 检测。例如,它可能会在设备生成新事件 变得与不同的细胞塔相关联。它不依赖 distanceFilter属性中的值,用于生成事件。调用 这种方法连续几次不会自动产生 在生成的新事件中。调用 但是,stopMonitoringSignificantLocationChanges介于两者之间 导致下次调用时发送新的初始事件 方法
如果您启动此服务,则随后会提交您的申请 终止后,系统会自动将应用程序重新启动到 新活动到来的背景。在这种情况下,选项 字典传递给locationManager:didUpdateLocations:方法 您的应用程序委托包含密钥 UIApplicationLaunchOptionsLocationKey表示你的 应用程序是由于位置事件而启动的。重新启动后, 您仍然必须配置位置管理器对象并调用它 继续接收位置事件的方法。当你重新启动 位置服务,当前事件将传递给您的代理人 立即。此外,您所在位置的位置属性 管理器对象甚至填充了最新的位置对象 在开始定位服务之前。
除了你的委托对象实现了 locationManager:didUpdateLocations:方法,它也应该实现 locationManager:didFailWithError:响应潜力的方法 错误。
注意:只要设备移动500,应用就会收到通知 距其先前通知的米或更多。不应该期待 通知频率高于每五分钟一次。如果 设备能够从网络中检索位置管理器的数据 更有可能及时发送通知。