// // LocationHelper.m // RealEstateManagement // // Created by Javen on 2016/10/10. // Copyright © 2016年 上海勾芒信息科技. All rights reserved. // #import "LocationHelper.h" #import @interface LocationHelper () @property (nonatomic, strong) CLLocationManager *locationManager; @end @implementation LocationHelper + (LocationHelper *)shareInstance { static LocationHelper *helper = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ helper = [[LocationHelper alloc] init]; }); return helper; } - (void)getCityNameSuccess:(locationBlock)success failed:(locationBlock)failed { self.blockSuccess = success; self.blockFailed = failed; [self startLocation]; } #pragma mark - 定位方法 //开始定位 - (void)startLocation { if ([CLLocationManager locationServicesEnabled]) { // CLog(@"--------开始定位"); self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; //控制定位精度,越高耗电量越 self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; // 总是授权 [self.locationManager requestAlwaysAuthorization]; self.locationManager.distanceFilter = 10.0f; [self.locationManager requestAlwaysAuthorization]; [self.locationManager startUpdatingLocation]; } } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { if ([error code] == kCLErrorDenied) { if (self.blockFailed) { self.blockFailed(@"访问被拒绝"); } } if ([error code] == kCLErrorLocationUnknown) { if (self.blockFailed) { self.blockFailed(@"无法获取位置信息"); } } } //定位代理经纬度回调 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *newLocation = locations[0]; // 获取当前所在的城市名 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; //根据经纬度反向地理编译出地址信息 WS(weakSelf); [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *array, NSError *error) { if (array.count > 0) { CLPlacemark *placemark = [array objectAtIndex:0]; //获取城市 NSString *city = placemark.locality; // NSString *zipCode = placemark.postalCode; if (!city) { //四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市) city = placemark.administrativeArea; } weakSelf.blockSuccess(city); } else if (error == nil && [array count] == 0) { NSLog(@"No results were returned."); } else if (error != nil) { NSLog(@"An error occurred = %@", error); } }]; //系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新 [manager stopUpdatingLocation]; } @end