本文转自:http://blog.devzeng.com/blog/ios8-corelocation-framework.html

iOS8以前使用CoreLocation定位

1、首先定义一个全局的变量用来记录CLLocationManager对象,引入CoreLocation.framework使用#import <CoreLocation/CoreLocation.h>

   @property (nonatomic, strong) CLLocationManager *locationManager;

 

2、初始化CLLocationManager并开始定位

self.locationManager = [[CLLocationManager alloc]init];
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
_locationManager.distanceFilter = 10;
[_locationManager startUpdatingLocation];
 

3、实现CLLocationManagerDelegate的代理方法

(1)获取到位置数据,返回的是一个CLLocation的数组,一般使用其中的一个

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *currLocation = [locations lastObject];
NSLog(@"经度=%f 纬度=%f 高度=%f", currLocation.coordinate.latitude, currLocation.coordinate.longitude, currLocation.altitude);
}
 

(2)获取用户位置数据失败的回调方法,在此通知用户

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

4、在viewWillDisappear关闭定位

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[_locationManager stopUpdatingLocation];
}
 

iOS8中使用CoreLocation定位

1、在使用CoreLocation前需要调用如下函数【iOS8专用】:

iOS8对定位进行了一些修改,其中包括定位授权的方法,CLLocationManager增加了下面的两个方法:

(1)始终允许访问位置信息

- (void)requestAlwaysAuthorization;

(2)使用应用程序期间允许访问位置数据

- (void)requestWhenInUseAuthorization;

示例如下:

self.locationManager = [[CLLocationManager alloc]init];
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
_locationManager.distanceFilter = 10;
[_locationManager requestAlwaysAuthorization];//添加这句
[_locationManager startUpdatingLocation];
 

2、在Info.plist文件中添加如下配置:

(1)NSLocationAlwaysUsageDescription

(2)NSLocationWhenInUseUsageDescription

这两个键的值就是授权alert的描述,示例配置如下[勾选Show Raw Keys/Values后进行添加]:


参考资料

1、《迎接iOS8 – CoreLocation的变化》

2、《IOS开发之Core Location》

3、《IOS8下的定位授权》

最新文章

  1. 初探领域驱动设计(2)Repository在DDD中的应用
  2. .stop()
  3. Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)
  4. Go 命令之 godep
  5. Ubuntu 开启 Crontab 计划任务日志
  6. Js(javaScript)的闭包原理
  7. Android 数据库升级解决方案
  8. 如何快速掌握CSS(各种CSS工具)
  9. js收集错误信息,错误上报
  10. android开发MD5加密工具类(一)
  11. java反射机制入门3
  12. 65、django之模型层(model)--添加、单表查询、修改基础
  13. C# 函数式编程 —— 使用 Lambda 表达式编写递归函数
  14. iOS 环信集成项目应用
  15. 安卓AsyncTack详解
  16. SSM-SpringMVC-05:SpringMVC视图解析器InternalResourceViewResolver配置
  17. ✔ OI Diary ★
  18. 文本分类实战(一)—— word2vec预训练词向量
  19. vue——script内容详解
  20. Log4Net配置日志

热门文章

  1. [MSSQL2005]再看CTE
  2. 安卓App和java通信实例
  3. Linux驱动学习步骤(转载)
  4. apache 虚拟主机的配置
  5. 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(三)
  6. C# 热敏打印机 Socket 网络链接 打印 图片
  7. “LAMP“或“LNMP”组合
  8. [转]如果我有jQuery背景,我应该如何切换到AngularJS的思维模式?
  9. liunx 套接字编程(Linux_C++)
  10. 【BootStrap】初步教程