您的位置:首页 > 移动开发 > IOS开发

iOS 手机定位 获取当前城市

2016-03-10 17:28 1611 查看
先导入头文件

#import <CoreLocation/CoreLocation.h>

我之前写的 一直没有走定位的代理方法 然后最后找到 原因是在 Info.plist文件中加

NSLocationWhenInUseUsageDescription

NSLocationAlwaysUsageDescription 都设置为Boolean 值都为YES

@property (nonatomic,strong)CLLocationManager *locationManager;

@property (nonatomic,copy)NSString *cityName;

#pragma mark 定位

- (void)locate

{

    if (!self.locationManager)

    {

        

        self.locationManager = [[CLLocationManager alloc] init];

        

        self.locationManager.delegate = self;

        self.locationManager.distanceFilter=1.0;

        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

        

        if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0)

        {

            [self.locationManager requestWhenInUseAuthorization];

        }

        [self.locationManager startUpdatingLocation];

        

    } else {

        [self.locationManager startUpdatingLocation];

    }

    

}

#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];

             //获取城市

             

             NSString *city = placemark.locality;

             

             if (!city) {

                 

                 //四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)

                 city = placemark.administrativeArea;

                 

             }

              self.cityName = city;

            

             [manager stopUpdatingLocation];

         }

         

         else if (error == nil && [array count] == 0)

             

         {

             self.cityName=@"定位失败";

             [self judgeLocationIsTure];

         }

         

         else if (error != nil)

             

         {

             self.cityName=@"定位失败";

            

             

         }

         

     }];

}

- (void)locationManager:(CLLocationManager *)manager

       didFailWithError:(NSError *)error {

    

    if (error.code == kCLErrorDenied) {

        self.cityName=@"定位失败";

       

        // 提示用户出错原因,可按住Option键点击 KCLErrorDenied的查看更多出错信息,可打印error.code值查找原因所在

        

    }

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: