StartUpdatingLocation与重要更改位置服务

时间:2013-02-05 13:50:34

标签: iphone ios geolocation location cllocationmanager

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

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

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

1 个答案:

答案 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,应用就会收到通知   距其先前通知的米或更多。不应该期待   通知频率高于每五分钟一次。如果   设备能够从网络中检索位置管理器的数据   更有可能及时发送通知。