iOS允许位置服务权限后获取位置

时间:2014-12-12 09:32:01

标签: ios google-maps location cllocationmanager

在应用程序开始时,应用程序请求用户的当前位置。 AlertBox弹出关于授予应用程序访问位置服务的权限。我的问题是如何在用户允许位置服务后立即获取位置?

我的代码

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

    latitude = [NSString stringWithFormat:@"%f",self.locationManager.location.coordinate.latitude];
    longtitude = [NSString stringWithFormat:@"%f",self.locationManager.location.coordinate.longitude];


    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:[latitude floatValue]
                                                        longitude:[longtitude floatValue]
                                                             zoom:16];
    mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    mapView.delegate = self;
    mapView.myLocationEnabled = YES;
    self.view = mapView;

    // Creates a marker in the center of the map.
    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.position = CLLocationCoordinate2DMake([latitude intValue], [longtitude intValue]);
    marker.title = @"Current Location";
    marker.map = mapView;
}

一旦允许位置服务,有没有办法获取用户的当前位置? 我的代码仅在用户允许位置服务然后重新启动应用程序时才有效。

我也试过实现下面的代码。但是NSLog没有出现。

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {

    CLLocation *loc = locations.lastObject;
    double speed = loc.speed;
    NSLog(@"speed-----%f ", speed);
}

有什么建议吗?我遗漏了什么吗?

2 个答案:

答案 0 :(得分:2)

刚刚提出:

self.locationManager.delegate = self;

这一行之后:

self.locationManager = [[CLLocationManager alloc] init];

注意: 确保在头文件中添加了CLLocationManagerDelegate。

答案 1 :(得分:1)

我的回答是一年太晚了,我使用的是Swift 2,但对于其他需要回答的人来说:

您需要更新didUpdateLocations委托中的mapview。请参阅下面的代码。

  func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

  if let location = locations.first {
        mapUIView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
        locationManager.stopUpdatingLocation()
    }
}