【问题标题】:How to do a user initiated precision location using CoreLocation?如何使用 CoreLocation 进行用户发起的精确定位?
【发布时间】:2013-12-27 02:06:38
【问题描述】:

这是我的代码(实现类声明了 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 current location 功能,因此用户可以将他的当前位置标记为该项目的位置。除非他们选择该选项,否则我不需要(或不想)浪费电池运行 GPS。但是当他们这样做时,我想要尽可能精确的值。我的想法是以最大精度运行它,等待几次更新(也许确保值稳定),然后记录最终值。有没有更好的方法来做到这一点?

更新

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

【问题讨论】:

    标签: ios ios7 core-location cllocationmanager


    【解决方案1】:

    我看到您正在使用kCLLocationAccuracyBestForNavigation,它提供了尽可能高的准确性。除非您尝试获取运动中的用户或对象的当前位置,否则您不必等待太多位置更新。

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

    【讨论】:

    • 知道为什么当我按下按钮运行该代码(noteLocation 方法)时,允许对话框打开一秒钟然后消失,没有交互?
    猜你喜欢
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2013-09-22
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    相关资源
    最近更新 更多