如何使用CoreLocation执行用户启动的精确位置?

时间:2013-12-27 02:06:39

标签: ios ios7 core-location cllocationmanager

这是我的代码(实现类声明了CLCoreLocationManagerDelegate协议):

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    NSLog(@"locations %@", locations);
}

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    NSLog(@"auth status: %u", status);
}

- (void)noteLocation {
    if ([CLLocationManager locationServicesEnabled] == NO)
    {
        NSLog(@"rejected");
        return;
    };
    CLLocationManager* manager = [CLLocationManager new];
    manager.delegate = self;
    manager.pausesLocationUpdatesAutomatically = NO;
    manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    [manager startUpdatingLocation];

}

运行noteLocation方法,我的应用程序会短暂打开“thisApp”想要使用您的当前位置提示。但它立即关闭。我不回答任何一种方式。委托方法永远不会解雇。

我只想努力做到这一点。但是,还有一个更大的架构问题。我的应用程序为其编目的项目提供了 note当前位置功能,因此用户可以将其当前位置标记为该项目的位置。除非他们选择该选项,否则我不需要(或想要)浪费运行GPS的电池。但是当他们这样做时,我希望尽可能精确的价值。我的想法是以最高精度运行它,等待几次更新(可能确保值正在稳定),然后记录最终值。这样做有更好的方法吗?

更新

提示符正在消失,因为我需要将LocationManager实例存储在不会收集垃圾的地方。

1 个答案:

答案 0 :(得分:1)

我发现您正在使用kCLLocationAccuracyBestForNavigation,这可以提供最佳的准确性。除非您尝试获取正在运行的用户或对象的当前位置,否则您无需等待位置更新。

CLLocation包含两个属性 - horizontalAccuracyverticalAccuracy。您可以通过执行一些测试并显示这些属性的值来测量程序的准确性。