获取用户位置信息-LYXLocationManager

背景

在我们使用app的过程中,很普遍的见到请求我们所在的位置信息,用来匹配附近,同城的展示信息。为以后重复造轮子,方便使用,抽出来封装了LYXLocationManager. 里面的api可以方便的获取用户的详细位置信息,独立的county, province, city, district等信息获取。

1.iOS8.0之后需配置info.plist文件:

Privacy - Location When In Use Usage Description
Privacy - Location Always Usage Description

2.请求用户授权:

 + (void)lyx_requestAlwaysAuthorization{
     if([UIDevice currentDevice].systemVersion.floatValue >= 8.0){
         [[LYXLocationManager sharedManager].lyx_locManager requestAlwaysAuthorization];
     }
 }

+ (void)lyx_requestWhenInUseAuthorization{
    if([UIDevice currentDevice].systemVersion.floatValue >= 8.0){
        [[LYXLocationManager sharedManager].lyx_locManager requestWhenInUseAuthorization];
    }
}

3.请求获取用户位置信息:

  - (void)updateLocation{
      if ([CLLocationManager locationServicesEnabled]) {
          if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0) {
              [[LYXLocationManager sharedManager].lyx_locManager requestLocation];
          }else if([UIDevice currentDevice].systemVersion.floatValue >= 8.0){
              [[LYXLocationManager sharedManager].lyx_locManager startUpdatingLocation];
          }
      }
  }

4.在代理方法中反编码用户经纬度信息,获取用户位置:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *location = [locations firstObject];
    NSLog(@"%@", location);

    // 反地理编码(经纬度---地址)
    [[[CLGeocoder alloc] init] reverseGeocodeLocation:location completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) {
        if(error == nil)
        {
            CLPlacemark *pl = [placemarks firstObject];
            self.completeBlock ? self.completeBlock(pl.locality,nil) : nil;
        }else
        {
            NSLog(@"错误");
            self.completeBlock ? self.completeBlock(nil,error) : nil;
        }
    }];
}

集成方式:

1.由于比较轻量,下载下来,当做一个工具类,导入项目中。
2.在需要使用的vc中导入下面的头文件
#import "LYXLocationManager.h"
3.使用下的方法获取用户位置信息
 //请求授权
[LYXLocationManager lyx_requestWhenInUseAuthorization];
[LYXLocationManager lyx_requestAlwaysAuthorization];
//请求用户位置信息
[LYXLocationManager lyx_requestLocationWith:^(NSString *locationDetail, CLPlacemark *placemark, NSError *error) {
    if (error == nil) {
        self.locationLabel.text = locationDetail ?: @"未获取到位置信息";
    }else{
        self.locationLabel.text = @"获取位置错误";
    }
}];

最后demo地址奉上:

https://github.com/liuyunxin2014/LYXLocationManager.git

你可能感兴趣的:(获取用户位置信息-LYXLocationManager)