这是我的代码(实现类声明了 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 包含两个属性 - horizontalAccuracy
和 verticalAccuracy
。您可以通过执行一些测试并显示这些属性的值来衡量程序的准确性。
关于ios - 如何使用 CoreLocation 进行用户启动的精确定位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793780/