iOS判断当前经纬度是否在中国

1、要导入定位工具包。

#import <CoreLocation/CoreLocation.h>

2、全局CLLocationManager对象,用于定位。一定要全局,不然会因为引用计数变成0导致定位开启就没了后文。一定要全局!一定要全局!重要的事情说三遍。

@property (nonatomic, strong) CLLocationManager *locationManager;

3、创建CLLocationManager对象,开启定位方法。

//开始定位

- (void)startLocation {

if ([CLLocationManager locationServicesEnabled]) {

//        CLog(@"--------开始定位");

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

//设置代理

self.locationManager.delegate = self;

//控制定位精度,越高耗电量越

self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;

// 询问用户总是授权可以定位

[self.locationManager requestWhenInUseAuthorization];

[self.locationManager requestAlwaysAuthorization];

self.locationManager.distanceFilter = 10.0f;

//开始定位

[self.locationManager startUpdatingLocation];

}

}

4、签订代理<CLLocationManagerDelegate>,并实现两个代理方法

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {    if ([error code] == kCLErrorDenied) {        //        CLog(@"访问被拒绝");    }    if ([error code] == kCLErrorLocationUnknown) {        //        CLog(@"无法获取位置信息");    }}


//定位代理经纬度回调

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations {

CLLocation *newLocation = locations[0];

//拿到定位信息,判断是非是中国,判断码是“CN”

[[[CLGeocoder alloc]init] reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {

if (error || placemarks.count == 0) {

NSLog(@"不能确定是在中国");

} else {

CLPlacemark *placemark=[placemarks firstObject];

if ([placemark.ISOcountryCode isEqualToString:@"CN"]) {

NSLog(@"确定是在中国");

} else {

NSLog(@"确定不在中国");

}

}

}];

//系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新

[manager stopUpdatingLocation];

}

5、在infoplist文件中加入Privacy - Location When In Use Usage Description,值为显示的提示信息,可以自定义。

大功告成!

推荐阅读更多精彩内容