背景
在我们使用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<CLPlacemark *> * _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 = @"获取位置错误";
}
}];