8

如何获取当前位置的经纬度。

我试过这个。使用 Xcode 6.01 和 IOS SDK 8.0

-(CLLocationCoordinate2D) getLocation{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
    CLLocation *location = [locationManager location];
    CLLocationCoordinate2D coordinate = [location coordinate];
    return coordinate;
}

- (void)getCurrentLocation{    
    CLLocationCoordinate2D coordinate = [self getLocation];
    NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude];
    NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude];
    NSLog(@"Latitude  = %@", latitude);
    NSLog(@"Longitude = %@", longitude);
}


- (void)viewDidLoad{
    [super viewDidLoad];
    [self getCurrentLocation];

}

在这里,我将模拟器位置启用为 Deployment 8.0 iPhone 模拟器 4s。即使在设备上也无法正常工作。

@ALL 请让我知道,我在这里做错了什么。

4

4 回答 4

5

我在 IOS 8.0 中解决了问题

NSLocationAlwaysUsageDescription 将此手动添加到应用程序 plist 文件中,将字符串值留空。这将调用委托方法。永远不要忘记添加NSLocationAlwaysUsageDescription ,除非您没有添加此委托方法将不起作用。其余代码相同。向控制器类添加委托方法。

在 locationManager 声明代码中添加这行代码。对于 IOS 8.0 [locationManager requestAlwaysAuthorization];

于 2014-10-04T11:25:47.753 回答
3

在 iOS 8 中,此代码会静默失败,即您不会收到任何错误或警告。

您需要做两件额外的事情才能使位置正常工作:

  1. 将密钥添加到您的 Info.plist
  2. 请求位置管理器的授权,要求它开始。

需要在 Info.plist 文件中添加以下任何一个或两个键。

  1. NSLocationWhenInUseUsageDescription
  2. NSLocationAlwaysUsageDescription

这些是字符串类型,值可以是任何消息描述或为空。

现在您需要为相应的定位方法请求授权。使用以下任一调用:

  1. [self.locationManager requestWhenInUseAuthorization]
  2. [self.locationManager requestAlwaysAuthorization]
于 2015-02-12T07:17:35.247 回答
0

看来我们需要做更多的任务来在 ios8 中实现定位服务。 关注这个讨论

于 2014-10-01T19:00:31.647 回答
0

是的,模拟器提供了过于简化的定位服务。物理设备是真正测试CLLocationManager行为的唯一方法。

问题是,当您调用时startUpdatingLocation,并不意味着您可以立即检索location. (我想你会发现它要么是负数,要么nil是负数horizontalAccuracy,这意味着位置尚未确定。)

您必须符合CLLocationManagerDelegate, 和 implement locationManager:didUpdateLocations:,这是异步调用的。因此,在尝试使用位置信息之前,您必须等待调用此方法。并且,请注意,在真实设备上,您可能会看到此方法被调用多次,因为设备会不断改进设备位置信息,并提高准确性(例如,您可能会看到horizontalAccuracy从一个位置更新到另一个位置的数字会下降)。


显然,您可能也想实现locationManager:didFailWithError:,以便可以检测到问题。您可能还应该在调用之前检查authorizationStatus、、locationServicesEnabled和调用。requestWhenInUseAuthorizationstartUpdatingLocation

于 2014-10-01T18:39:18.243 回答