获取 当前 位置信息

import <CoreLocation/CoreLocation.h>

把CLLocationManager设置为属性。
这里有一个坑点,如果不设置为属性,软件开启时提示定位的提示出现一瞬间就消失了。

@interface HomeViewController ()<CLLocationManagerDelegate>
@property (nonatomic, strong) CLLocationManager *locationManager;

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

      [JKProgressHUD showErrorWithStatus:@"访问被拒绝"];
    

    }
    if ([error code] == kCLErrorLocationUnknown) {

      [JKProgressHUD showErrorWithStatus:@"无法获取位置信息"];
    

    }
    }

pragma mark - 定位代理 经纬度回调

  • (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
    CLLocation *newLocation = locations[0];

    // 获取当前所在的城市名
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    //根据经纬度反向地理编译出地址信息
    [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *array, NSError *error){
    if (array.count > 0){
    CLPlacemark *placemark = [array objectAtIndex:0];

          //获取城市
          NSString *city = placemark.locality;
          if (!city) {
              //四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)
              city = placemark.administrativeArea;
          }
          //获取街道
          NSString * thoroughfare = placemark.thoroughfare;
          
          NSString * location = [NSString stringWithFormat:@"%@%@",city,thoroughfare];
          
          NSLog(@"当前位置 :%@",location);
    

// [self httpGetWeather:city];
}
else if (error == nil && [array count] == 0)
{
NSLog(@"No results were returned.");
}
else if (error != nil)
{
NSLog(@"An error occurred = %@", error);
}
}];
//系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新
[manager stopUpdatingLocation];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容