使用 CLLocationManager 获取单个位置更新
Getting a single location update using CLLocationManager
我有一个独特的要求,即提供设备位置。它是独一无二的,因为我需要打开位置更新,获取设备位置,然后立即关闭更新(电池寿命要求)。由于获取位置可能需要一些时间,因此我对以下代码示例有些担忧...
-(CLLocation *)getActualLocation{
CLLocation *actualLocation;
[coreLocationManager startUpdatingLocation];
actualLocation = [coreLocationManager location];
// stop updates
return actualLocation;
}
...因为调用 set actualLocation
可能会在任何更新可用之前执行。关于如何解决这个问题的任何建议?谢谢!
恕我直言,你最好的选择是等待第一个位置更新被传送,然后立即停止位置更新程序。这仍然会给您留下过时或非常不准确的位置,但您可以在必要时检查委托中的那些。
开始更新后直接获取位置可能不会获得好的结果,因为更新是异步完成的,结果尚不可用。
iOS 在位置更新期间降低功耗方面已经做得很好,所以这应该不是什么大问题。
这将始终是一个异步操作,因此您必须启用更新并等待您收到反馈。一旦它进来,你可以阻止位置管理器更新
从 iOS9 开始,您可以调用新的 requestLocation() 方法来执行您所描述的操作,确保在关闭位置之前只有一个回调
博客post:http://szulctomasz.com/ios-9-getting-single-location-update-with-requestlocation/
我有一个独特的要求,即提供设备位置。它是独一无二的,因为我需要打开位置更新,获取设备位置,然后立即关闭更新(电池寿命要求)。由于获取位置可能需要一些时间,因此我对以下代码示例有些担忧...
-(CLLocation *)getActualLocation{
CLLocation *actualLocation;
[coreLocationManager startUpdatingLocation];
actualLocation = [coreLocationManager location];
// stop updates
return actualLocation;
}
...因为调用 set actualLocation
可能会在任何更新可用之前执行。关于如何解决这个问题的任何建议?谢谢!
恕我直言,你最好的选择是等待第一个位置更新被传送,然后立即停止位置更新程序。这仍然会给您留下过时或非常不准确的位置,但您可以在必要时检查委托中的那些。
开始更新后直接获取位置可能不会获得好的结果,因为更新是异步完成的,结果尚不可用。
iOS 在位置更新期间降低功耗方面已经做得很好,所以这应该不是什么大问题。
这将始终是一个异步操作,因此您必须启用更新并等待您收到反馈。一旦它进来,你可以阻止位置管理器更新
从 iOS9 开始,您可以调用新的 requestLocation() 方法来执行您所描述的操作,确保在关闭位置之前只有一个回调
博客post:http://szulctomasz.com/ios-9-getting-single-location-update-with-requestlocation/