ios - 如何使用 CoreLocation 进行用户启动的精确定位?

标签 ios ios7 core-location cllocationmanager

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

- (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” Would Like to Use your Current Location 提示。但它立即关闭。无论哪种方式我都无法回答。并且委托(delegate)方法永远不会触发。

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

更新

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

最佳答案

我发现您正在使用kCLLocationAccuracyBestForNavigation,它提供了最佳的准确性。除非您尝试获取运动中的用户或物体的当前位置,否则您不必等待太多位置更新。

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

关于ios - 如何使用 CoreLocation 进行用户启动的精确定位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793780/

相关文章:

ios - iOS 7 上 Swift 崩溃中的本地通知

ios - 使字体与 UILabel 一起增长(通过自动布局调整大小)- 如何在 Interface Builder 中做到这一点?

iphone - 如何在iOS模拟器中测试UI Interpolating Motion Effect?

ios - GMSMapView 中的自动布局

ios - iOS8 上的简单 NSURLCache 实现

iphone - iOS 7 - 没有配置的 ios 设备可用

swift - AVPlayerViewController 适用于 iOS8 但不适用于 IOS7

ios - 为什么 .geocodeAddressString 不改变外部变量?

iphone - 使用 CoreLocation 防止零星坐标

ios - 当关闭启动位置服务通知错误的 View 时