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

Posted

技术标签:

【中文标题】iOS 在允许位置服务权限后获取位置【英文标题】:iOS Get Location after allow location services permission 【发布时间】:2015-02-10 23:36:06 【问题描述】:

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

我的代码

- (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);

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

【问题讨论】:

你不见了self.locationManager.delegate=self; 等待...?而已?我会尽快试一试。现在无法尝试。就此事与您联系 是的,ios 7 及更低版本缺少代理;对于 iOS 8,您需要更多:requestAlwaysAuthorization 是的,你是对的!谢谢 @IssacZH。您是否正在从您的代码中获取 currentloaiton?我无法通过此代码获取当前位置 【参考方案1】:

简单地说:

self.locationManager.delegate = self;

在这一行之后:

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

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

【讨论】:

【参考方案2】:

我的答案来得太晚了一年,我正在使用 Swift 2,但对于其他需要答案的人:

您需要在 didUpdateLocations 委托中更新地图视图。请看下面的代码。

  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()
    

【讨论】:

以上是关于iOS 在允许位置服务权限后获取位置的主要内容,如果未能解决你的问题,请参考以下文章

小程序中首次获取位置权限失败后,主动引导用户授权方案

即使在终止应用程序后,我们还能获取位置信息吗? [关闭]

如何在棉花糖中首次启动应用程序时获取位置访问权限

ios如何获取位置权限

苹果是不是允许 ios 应用程序通过 IP 地址获取用户位置

iOS 通知和位置服务权限在启动时显示多次