//1、添加定位管理委托协议 CLLocationManagerDelegate

 //2、初始化定位管理对象

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

self.locationManager.delegate=self;

//定位精度

self.locationManager.desiredAccuracy=kCLLocationAccuracyBest;

//多长距离更新一次位置

self.locationManager.distanceFilter=50;

if (UIDevice.currentDevice.systemVersion.integerValue>8.0)

{

[self.locationManager requestAlwaysAuthorization];

[self.locationManager requestWhenInUseAuthorization];

}

 //开启定位服务

if (self.locationManager.locationServicesEnabled) {

[self.locationManager startUpdatingLocation];

}

 //3、调用系统定位方法

  

#pragma mark - CLLocation Delegate

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status

{

switch (status)

{

case kCLAuthorizationStatusNotDetermined:

if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])

{

[_locationManager requestAlwaysAuthorization];

}

break;

default:

break;

}

}

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

{

//获取当前位置信息

CLLocation *location = [locations objectAtIndex:0];

//判断是否是在国内

if (![WGS84TOGCJ02 isLocationOutOfChina:[location coordinate]])

{

   //设置锁,防止并发写入

[[NSUserDefaults standardUserDefaults] synchronize];

//转换后的coord

CLLocationCoordinate2D coord = [WGS84TOGCJ02 transformFromWGSToGCJ:[location coordinate]];

_myCoordinate = coord;

[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%f",_myCoordinate.latitude] forKey:KCurrentLat];

[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%f",_myCoordinate.longitude] forKey:KCurrentLng];

}

//创建反地理编码对象

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

 //将经纬度信息转换成字符串位置信息

[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *array, NSError *error)

{

//         NSLog(@"placemark:%@",array);

if (array.count > 0)

{

CLPlacemark *placemark = [array objectAtIndex:0];

if (![DGFunction xfunc_check_strEmpty:placemark.locality])

{

[[ NSUserDefaults standardUserDefaults] setObject:placemark.locality forKey:@"localCity"];

[[NSUserDefaults standardUserDefaults] synchronize];

//                 NSDictionary *dic = @{@"city":placemark.locality};

if (![DGFunction xfunc_check_strEmpty:placemark.locality]) {

[[NSUserDefaults standardUserDefaults] setObject:placemark.administrativeArea forKey:k_Current_Province];

}

if (![DGFunction xfunc_check_strEmpty:placemark.locality]) {

[[NSUserDefaults standardUserDefaults] setObject:placemark.locality forKey:k_Current_City];

}

if (![DGFunction xfunc_check_strEmpty:placemark.subLocality]) {

[[NSUserDefaults standardUserDefaults] setObject:placemark.subLocality forKey:k_Current_Area];

}

[[NSUserDefaults standardUserDefaults] synchronize];

NSLog(@"locality:%@ subLocality:%@",placemark.locality,placemark.subLocality);

//关闭定位服务

      [_locationManager stopUpdatingLocation];

}

}

}];

}

ios中关于系统定位CLLocationManager的使用解析的更多相关文章

  1. ios 苹果原生系统定位 CLLocationManager

    首先要干这些事 下面的方法亲测可用 ------------------------------------------------------------ DNLogFUNC //初始化位置管理对象 ...

  2. IOS中调用系统的电话、短信、邮件、浏览功能

    iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评 ...

  3. iOS - (利用/调用系统定位获取当前经纬度与地理信息)

    这些天做iOS项目的时候,需要通过定位来拿到当期城市的名称.百度地图SDK有这个功能,但为了不依赖第三方,这里使用iOS自带框架CoreLocation来实现这个需求.iOS8出来之后,针对定位需要多 ...

  4. iOS中获取系统相册中的图片

    一.获取单张图片 思路: 1.利用UIImagePickerController可以从系统自带的App(照片\相机)中获得图片 2.设置代理,遵守代理协议 注意这个UIImagePickerContr ...

  5. [BS-04] 在iOS中对系统定义的类的readonly属性可通过KVC进行赋值

    系统提供的类的readonly属性可通过KVC进行赋值 UITabBarController.h @interface UITabBarController : UIViewController &l ...

  6. iOS中调用系统录音功能及其播放

    最近做的项目中,用到了录音的功能,简单记录一下. 我的想法是:通过重写button的点击事件,来达到录音的目的. /*----------------------------------[录音]--- ...

  7. iOS中打印系统详细日志

    Q:如何打印当前的函数和行号? A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号.如: 1 NSLog(@"%s:%d obj=%@", __func__, ...

  8. iOS中 自定义系统相机 作者:韩俊强

    需要框架: #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> 布局如下 ...

  9. IOS中调用系统拨打电话发送短信

    一.调用打电话界面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat ...

随机推荐

  1. 机器学习 第4篇:sklearn 最邻近算法概述

    sklearn.neighbors 提供了针对无监督和受监督的基于邻居的学习方法的功能.监督的基于最邻近的机器学习算法是值:对带标签的数据的分类和对连续数据的预测(回归). 无监督的最近算法是许多其他 ...

  2. Tomcat启动中文乱码

    将Tomcat中conf里面的logging.properties修改一下编码方式: java.util.logging.ConsoleHandler.encoding = UTF-8 改成 java ...

  3. 【SpringCloud】05.Eureka的高可用

    1.简单情况 2.为了达到Eureka的高可用,可以多个Eureka互相注册. 3.我们需要修改两处: Eureka Client Eureka Server 3.1 Eureka Client 在C ...

  4. 4 urllib和urllib2的区别

    4 urllib和urllib2的区别 这个面试官确实问过,当时答的urllib2可以Post而urllib不可以. urllib提供urlencode方法用来GET查询字符串的产生,而urllib2 ...

  5. 常用简单电脑bai快捷键大全

    Ctrl+C 复制.duCtrl+X 剪切.Ctrl+V粘贴.Ctrl+Z撤销.Ctrl+A全选所有文件.zhiDelete删除.daoShift+Delete避开回收站直接永久删除(不可找回).F3 ...

  6. Blog.Core 项目已完成升级.NET5.0

    (是时候拿出来这种图了) 本文首发于公众号,但是会有新的内容加进来,所以就在博客园新开了一篇,望见谅.截止发稿,Blog.Core项目Master分支已经迁移到了5.0,新建了3.1的分支. 开心的锣 ...

  7. Redis缓存穿透和雪崩

    缓存穿透 用户想要查询一个数据 在redis缓存数据库中没有获取到 就会向后端的数据库中查询. 当用户很多 都去访问后端数据库的话,这就会给数据库带来很大的压力. 常见场景:秒杀活动 等 解决方法: ...

  8. .NetMvc从http或本地下载pdf文件

    1.帮助类 1 public static class PdfHelper 2 { 3 #region 从http链接下载 4 public static void Download(string u ...

  9. [MIT6.006] 11. Integer Arithmetic, Karatsuba Multiplication 整型算术,Karatsuba乘法

    很多人不喜欢√2的表达,他们认为它不是一个数. 一.卡塔兰数 Catalan numbers 在数方面上,有个著名的数叫卡塔兰数 Catalan numbers,它是组合数学中一个常在各种计数问题中出 ...

  10. Python_多进程_pool进程池

    多进程典型案例: 1.将子进程的进程名作为列表中的元素,在父进程中遍历(异步)执行 #coding: utf-8 from multiprocessing import Pool import os, ...