这是我的代码(实现类声明了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实例存储在不会收集垃圾的地方。
答案 0 :(得分:1)
我发现您正在使用kCLLocationAccuracyBestForNavigation
,这可以提供最佳的准确性。除非您尝试获取正在运行的用户或对象的当前位置,否则您无需等待位置更新。
CLLocation包含两个属性 - horizontalAccuracy
和verticalAccuracy
。您可以通过执行一些测试并显示这些属性的值来测量程序的准确性。