如何在iOS上获取当前位置?

时间:2013-03-07 07:47:46

标签: iphone ios objective-c core-location cllocationmanager

我无法获得当前位置。当我在不同的地方启动我的应用程序时,App可以获得最后的位置。但我不想最后的位置。如果您关闭应用并重新启动它,现在应用可以获取当前位置。即使首次启动应用程序,我怎样才能获得当前位置?

- (void)viewDidLoad
{
    [super viewDidLoad];

    [locationManager startUpdatingLocation];

    self.mapView.delegate = self;
    [self.mapView setShowsUserLocation:YES];

    locationManager.delegate=self;

    locationManager = [[CLLocationManager alloc] init];

    locationManager.delegate=self;
    locationManager.desiredAccuracy=kCLLocationAccuracyBest;
    locationManager.distanceFilter=kCLDistanceFilterNone;

    location = [locationManager location];

    CLLocationCoordinate2D coord;
    coord.longitude = location.coordinate.longitude;
    coord.latitude = location.coordinate.latitude;
    lat = coord.latitude;
    longt = coord.longitude;
}

4 个答案:

答案 0 :(得分:8)

在设置其委托

之前,您正在执行[locationManager startUpdatingLocation];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate=self;
locationManager.desiredAccuracy=kCLLocationAccuracyBest;
locationManager.distanceFilter=kCLDistanceFilterNone;

[locationManager startUpdatingLocation];

并实现其委托方法

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
}

- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error
{

}

答案 1 :(得分:2)

要获取当前位置及其坐标,您只需在viewDidLoad方法中执行此操作:

- (void)viewDidLoad {
  [super viewDidLoad];
  locationManager = [[CLLocationManager alloc] init];
  locationManager.delegate = self;
  locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
  locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
  [locationManager startUpdatingLocation];
}

关于更新位置,请使用以下方法:

    - (void)locationManager:(CLLocationManager *)manager
        didUpdateToLocation:(CLLocation *)newLocation
               fromLocation:(CLLocation *)oldLocation{
// your code here...
}

答案 2 :(得分:0)

您应该阅读Location Awareness Programming Guide

中提供的文档

具体来说,当您要求当前位置时,系统会立即返回上一个已知位置,以便您可以使用它做一些有用的事情。如果您不关心过去的位置,则可以通过查看返回的CLLocation的{​​{3}}属性来丢弃它并仅使用更新的位置信息,以确定其最近的位置。

答案 3 :(得分:0)

您应该阅读CLLocationManager文档。

您正在做的Wat将无法工作,因为确定设备位置需要一些时间。 因此,您需要等到CLLocationManager通知您某个位置已被阻止。

您需要实施CLLocationManagerDelegate,它会告诉您某个位置是否有效还是位置确定失败。

此外,您还应该检查位置是否可以阻止:

if ([CCLocationManager locationServicesEnabled]) {
    // The location services are available.
}

您还应该检查是否授权您使用位置服务[CCLocationManager authorizationStatus]