美文网首页
获取当前所在城市-定位信息

获取当前所在城市-定位信息

作者: weian1 | 来源:发表于2020-10-09 10:22 被阅读0次

    1、Info.plist里添加权限声明


    2614444-0a8a0f91c8f0b786.png

    2、导入框架

    import <CoreLocation/CoreLocation.h>

    3、头文件注册代理

    CLLocationManagerDelegate

    4、定义对象

    @property (nonatomic,strong) CLLocationManager *locationManager;

    5、开始定位

    - (void)startLocate{
    
      // 判断定位操作是否被允许
    
      if([CLLocationManager locationServicesEnabled]) {
    
        self.locationManager = [[CLLocationManager alloc] init] ;
    
        self.locationManager.delegate = self;
    
        self.locationManager.desiredAccuracy=kCLLocationAccuracyKilometer;
    
        // 设置过滤器为无
    
        self.locationManager.distanceFilter=kCLDistanceFilterNone;
    
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
    
          [self.locationManager requestWhenInUseAuthorization];
    
        }
    
        // 开始定位
    
        [self.locationManager startUpdatingLocation];
    
      }else {
    
        //提示用户无法进行定位操作
    
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"无法定位"message:@"请检查你的设备是否开启定位功能" delegate:nilcancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
    
        [alert show];
    
      }
    
    }
    

    6、代理方法

    #pragma mark - CoreLocation Delegate
    
    -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    
      //此处locations存储了持续更新的位置坐标值,取最后一个值为最新位置,如果不想让其持续更新位置,则在此方法中获取到一个值之后让locationManager stopUpdatingLocation
    
      CLLocation *currentLocation = [locations lastObject];
    
      // 获取当前所在的城市名
    
      CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    
      //根据经纬度反向地理编译出地址信息
    
      [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *array, NSError *error){
    
        if (array.count > 0){
    
          CLPlacemark *placemark = [array objectAtIndex:0];
    
          //将获得的所有信息显示到label上
    
          NSLog(@"%@",placemark.name);
    
          //获取城市
    
          NSString *city = placemark.locality;
    
          if (!city) {
    
            //四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)
    
            city = placemark.administrativeArea;
    
    //        self.cityName = city;
    
            NSLog(@"city = %@", city);
    
          }
    
        }else if (error == nil && [array count] == 0){
    
          NSLog(@"No results were returned.");
    
        }else if (error != nil){
    
          NSLog(@"An error occurred = %@", error);
    
        }
    
      }];
    
      //系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新
    
      [manager stopUpdatingLocation];
    
    }
    
    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    
      if (error.code == kCLErrorDenied) {
    
        // 提示用户出错原因,可按住Option键点击 KCLErrorDenied的查看更多出错信息,可打印error.code值查找原因所在
    
      }
    
    }
    

    相关文章

      网友评论

          本文标题:获取当前所在城市-定位信息

          本文链接:https://www.haomeiwen.com/subject/plxlpktx.html