使用 CLLocationManager 获取单个位置更新

Getting a single location update using CLLocationManager

我有一个独特的要求,即提供设备位置。它是独一无二的,因为我需要打开位置更新,获取设备位置,然后立即关闭更新(电池寿命要求)。由于获取位置可能需要一些时间,因此我对以下代码示例有些担忧...

-(CLLocation *)getActualLocation{
    CLLocation *actualLocation;
    [coreLocationManager startUpdatingLocation];
    actualLocation = [coreLocationManager location];

    // stop updates

    return actualLocation;
}

...因为调用 set actualLocation 可能会在任何更新可用之前执行。关于如何解决这个问题的任何建议?谢谢!

恕我直言,你最好的选择是等待第一个位置更新被传送,然后立即停止位置更新程序。这仍然会给您留下过时或非常不准确的位置,但您可以在必要时检查委托中的那些。

开始更新后直接获取位置可能不会获得好的结果,因为更新是异步完成的,结果尚不可用。

iOS 在位置更新期间降低功耗方面已经做得很好,所以这应该不是什么大问题。

Let it delegate to you

这将始终是一个异步操作,因此您必须启用更新并等待您收到反馈。一旦它进来,你可以阻止位置管理器更新

从 iOS9 开始,您可以调用新的 requestLocation() 方法来执行您所描述的操作,确保在关闭位置之前只有一个回调

官方文档:https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/#//apple_ref/occ/instm/CLLocationManager/requestLocation

博客post:http://szulctomasz.com/ios-9-getting-single-location-update-with-requestlocation/