【问题标题】:How to get current location latitude and longitude in IOS SDK 8.0如何在IOS SDK 8.0中获取当前位置的经纬度
【发布时间】:2014-11-26 16:25:26
【问题描述】:

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

我已经尝试过了。使用 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。 即使在设备上也无法正常工作。

@所有 请告诉我,我在这里做错了什么。

【问题讨论】:

    标签: ios8 core-location cllocationmanager cllocation currentlocation


    【解决方案1】:

    我在 IOS 8.0 中发现了问题

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

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

    【讨论】:

      【解决方案2】:

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

      你需要做两件额外的事情才能让定位工作:

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

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

      1. NSLocationWhenInUseUsageDescription
      2. NSLocationAlwaysUsageDescription

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

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

      1. [self.locationManager requestWhenInUseAuthorization]
      2. [self.locationManager requestAlwaysAuthorization]

      【讨论】:

        【解决方案3】:

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

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

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


        显然,您可能也想实现locationManager:didFailWithError:,以便可以检测到问题。在调用startUpdatingLocation 之前,您可能还应该检查authorizationStatuslocationServicesEnabled 并调用requestWhenInUseAuthorization

        【讨论】:

          【解决方案4】:

          看来我们需要做更多的工作来在 ios8 中实现定位服务。 follow this discussion

          【讨论】:

          • 添加了委托方法 didFailWithError 和 didUpdateToLocation 但这些方法根本没有触发
          • 请在您的 .h 文件中添加 CLLocationManagerDelegate,如下所示 @interface DemoViewController : UIViewController
          • 我添加了 CLLocationManagerDelegate,但我仍然有问题。将 sdk IOS 7 升级到 IOS 8 后出现问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-05
          • 1970-01-01
          • 2011-08-31
          • 2017-05-09
          • 2020-12-11
          • 1970-01-01
          相关资源
          最近更新 更多