博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取定位信息
阅读量:7076 次
发布时间:2019-06-28

本文共 3317 字,大约阅读时间需要 11 分钟。

先导入

然后在 info.plist 文件中添加 Privacy - Location Always and When In Use Usage Description 和 Privacy - Location When In Use Usage Description 两个就可以了。

 

LocationManager.h

#import 
typedef void(^LocationBlock)(NSString *lat, NSString *lon);@interface LocationManager : NSObject+ (instancetype)shareManager;- (void)getGps:(LocationBlock)block;@property (nonatomic, copy) NSString *lat;@property (nonatomic, copy) NSString *lon;@end

LocationManager.m

#import "LocationManager.h"#import 
@interface LocationManager ()
@property (nonatomic, strong) CLLocationManager *locManager;@property (nonatomic, copy) LocationBlock block;@end@implementation LocationManager+ (instancetype)shareManager { static LocationManager *_manager; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _manager = [[LocationManager alloc] init]; }); return _manager;}- (instancetype)init { if (self = [super init]) { _locManager = [[CLLocationManager alloc] init]; // 精确度 [_locManager setDesiredAccuracy:kCLLocationAccuracyBest]; // 精确到米 _locManager.distanceFilter = 100; _locManager.delegate = self; if (![CLLocationManager locationServicesEnabled]) { // 判断当前服务是否开启 NSLog(@"开启定位服务"); } else { // 当前状态 CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; if (status == kCLAuthorizationStatusNotDetermined) { // 未选中状态时候 [_locManager requestWhenInUseAuthorization]; } } } return self;}

- (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;

            }

 

            NSLog(@"city = %@", city); // 广州市

            NSLog(@"--%@",placemark.name);// 黄埔大道西447-5号

            NSLog(@"++++%@",placemark.subLocality); // 天河区

            NSLog(@"country == %@",placemark.country);// 中国

            NSLog(@"administrativeArea == %@",placemark.administrativeArea); // 广东省

        }

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

        {

            NSLog(@"No results were returned.");

        }

        else if (error != nil)

        {

            NSLog(@"An error occurred = %@", error);

        }

    }];

 

    CLLocationCoordinate2D coor = newLocation.coordinate;

    NSString *lat = [NSString stringWithFormat:@"%@", @(coor.latitude)];

    NSString *lon = [NSString stringWithFormat:@"%@", @(coor.longitude)];

 

    [LocationManager shareManager].lat = lat;

    [LocationManager shareManager].lon = lon;

    self.block(lat, lon);

 

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

    [self.locManager stopUpdatingLocation];

}

- (void)getGps:(LocationBlock)block {        self.block = block;    // 开始定位    [self.locManager startUpdatingLocation];}@end

 

调用方法:

[[LocationManager shareManager] getGps:^(NSString *lat, NSString *lon) {                NSLog(@"%@, %@", lat, lon);    }];

 

转载于:https://www.cnblogs.com/xuzb/p/8883820.html

你可能感兴趣的文章
java 消息摘要算法 MAC
查看>>
2011.11.6
查看>>
Linux系统获取命令帮助方法及简单命令介绍
查看>>
PyYAML序列化yaml文件数据
查看>>
Radmin远程连接TMG
查看>>
CCNA 学习笔记(三)--路由选择协议(静态路由协议)
查看>>
python 学习笔记(4)-转载
查看>>
python实例pyspark以及python中文显示
查看>>
一个典型核心网络故障分析
查看>>
获取lamp编译参数
查看>>
Linux系统下启动MySQL的命令及相关知识
查看>>
Shell理论学习(一)
查看>>
phpcms开发之模板语法规则
查看>>
CST UTC
查看>>
因为看见,所以发现:QBotVariant谢绝落幕
查看>>
我的友情链接
查看>>
让Apache支持shtml实现include文件解析的配置方法
查看>>
软件测试学习:检查产品说明书
查看>>
linux 防火墙
查看>>
mysql事务提交模式
查看>>