前言

	NS_CLASS_AVAILABLE(10_6, 2_0)
@interface CLLocationManager : NSObject

1、CoreLocation 定位

  • 配置

    • 1、在 iOS7 及以前的版本,如果在应用程序中使用定位服务只要在程序中调用 startUpdatingLocation 方法应用就会询问用户是否允许此应用是否允许使用定位服务,同时在提示过程中可以通过在 info.plist 中配置通过配置 Privacy - Location Usage Description 告诉用户使用的目的,同时这个配置是可选的。

      • 但是在 iOS8 中配置项发生了变化,可以通过配置 Privacy - Location Always Usage Description (NSLocationAlwaysUsageDescription) 或者 Privacy - Location When In Use Usage Description(NSLocationWhenInUseUsageDescription) 来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。同时,在应用程序中需要根据配置对 requestAlwaysAuthorizationrequestWhenInUseAuthorization 方法进行请求。

    • 2、在需要使用 CoreLocation 的文件中

      	// 包含头文件
      #import <CoreLocation/CoreLocation.h> // 遵守协议
      <CLLocationManagerDelegate>
  • 创建开启定位请求

    	// 声明定位管理器
    @property (nonatomic, strong) CLLocationManager *locationManager; // 实例化定位管理器
    self.locationManager = [[CLLocationManager alloc] init]; // 设置代理
    self.locationManager.delegate = self; // 判断系统定位服务是否开启
    if (![CLLocationManager locationServicesEnabled]) { // 创建警告框(自定义方法)
    [self showAlertWithTitle:@"提示" message:@"系统定位服务不可用,请开启 !"]; } else { // 判断应用定位服务授权状态
    if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){ // 没有授权 // 8.0 及以上系统需手动请求定位授权
    if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) { // 设置前台定位,需在 info.plist 里设置 Privacy - Location When In Use Usage Description 的值
    [self.locationManager requestWhenInUseAuthorization]; // 设置前后台同时定位,需在 info.plist 里设置 Privacy - Location Always Usage Description 的值
    // [self.locationManager requestAlwaysAuthorization];
    } // 开始定位追踪(第一次打开软件时)
    [self.locationManager startUpdatingLocation]; } else if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse
    || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways) { // 允许定位授权 // 开始定位追踪
    [self.locationManager startUpdatingLocation]; } else{ // 拒绝定位授权 // 创建警告框(自定义方法)
    [self showAlertWithTitle:@"提示" message:@"当前应用的定位服务不可用,请检查定位服务授权状态 !"];
    }
    }
  • 获取定位结果

    	// 定位到位置
    
    	// CLLocationManagerDelegate 协议方法
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ CLLocation *location = [locations lastObject]; // 经纬度
    CLLocationDegrees longitude = location.coordinate.longitude; // 经度
    CLLocationDegrees latitude = location.coordinate.latitude; // 纬度 // 海拔
    CLLocationDistance altitude = location.altitude; // 路线,航向(0.0 度~359.9 度,0.0 度代表真北方向)
    CLLocationDirection course = location.course; // 速度(m/s)
    float speed = location.speed; // 停止定位(如果不关闭,会一直处在定位请求中)
    [manager stopUpdatingLocation];
    }

2、CoreLocation 定位设置

	// 设置代理
self.locationManager.delegate = self; // 获取系统定位服务开启状态
BOOL isLocationServicesEnabled = [CLLocationManager locationServicesEnabled]; // 获取应用定位服务授权状态
CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus]; // 设置每隔多少米更新位置信息
self.locationManager.distanceFilter = kCLDistanceFilterNone; // 设置定位精确度
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; // 设置前台定位,需在 info.plist 里设置 Privacy - Location When In Use Usage Description 的值
[self.locationManager requestWhenInUseAuthorization]; // 设置前后台同时定位,需在 info.plist 里设置 Privacy - Location Always Usage Description 的值
[self.locationManager requestAlwaysAuthorization]; // 开始定位
[self.locationManager startUpdatingLocation]; // 停止定位(如果不关闭,会一直处在定位请求中)
[self.locationManager stopUpdatingLocation]; // 获取定位到的 经纬度
CLLocationDegrees longitude = location.coordinate.longitude; // 经度
CLLocationDegrees latitude = location.coordinate.latitude; // 纬度 // 获取定位到的 海拔
CLLocationDistance altitude = location.altitude; // 获取定位到的 路线,航向(0.0 度~359.9 度,0.0 度代表真北方向)
CLLocationDirection course = location.course; // 获取定位到的 速度(m/s)
float speed = location.speed; // 计算两个位置之间的距离
CLLocation *location1 = [[CLLocation alloc] initWithLatitude:40 longitude:116];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:41 longitude:116]; CLLocationDistance distance = [location1 distanceFromLocation:location2];

iOS - CoreLocation 定位的更多相关文章

  1. iOS开发拓展篇—CoreLocation定位服务

    iOS开发拓展篇—CoreLocation定位服务 一.简单说明 1.CLLocationManager CLLocationManager的常用操作和属性 开始用户定位- (void)startUp ...

  2. iOS地图 -- 定位初使用

    iOS的定位服务用到的框架是#import <CoreLocation/CoreLocation.h> 定位中用到的类是CLLocationManager 一.iOS8.0之前的定位 向用 ...

  3. iOS8中使用CoreLocation定位[转]

    本文转自:http://blog.devzeng.com/blog/ios8-corelocation-framework.html iOS8以前使用CoreLocation定位 1.首先定义一个全局 ...

  4. iOS后台定位实现

    iOS后台定位实现 (2013-01-24 16:43:12)     工作中碰到一个定位的应用场景:app需要在后台运行,实时上传用户地理位置.   苹果对iOS的规范性在提升了app的品质的同时也 ...

  5. iOS-----使用CoreLocation定位

    使用CoreLocation定位 CoreLocation框架 (CoreLocation.framework)可用于定位设备当前经纬度, 通过该框架, 应用程序可通过附近的蜂窝基站\WIFI信号 或 ...

  6. iOS | 地图定位

    在IOS开发中,最常见的功能之一就是地图定位功能,不单单是百度地图,高德地图等专业的地图导航软件,还有美团,咕咚等一些美食购物类和运动类也需要这样的功能,所以学会这项技能是一名IOS开发工程师必须的. ...

  7. iOS 后台定位被拒注意事项

    iOS 后台定位被拒的原因很简单就是没有达到苹果对后台定位的要求. 本地要求: 1.在plist文件中添加字段 "Privacy - Location Always Usage Descri ...

  8. iOS CLLocationManager定位

    本文转载至 http://www.tuicool.com/articles/7JBRZn 在iOS8以前的版本中,我们使用CLLocationManager定位是没有问题的,最近在iOS8系统中却无法 ...

  9. IOS CoreLocation框架的使用(用于地理定位)

    ●  在移动互联网时代,移动app能解决用户的很多生活琐事,比如 ●  导航:去任意陌生的地方 ●  周边:找餐馆.找酒店.找银行.找电影院 ●  在上述应用中,都用到了地图和定位功能,在iOS开发中 ...

随机推荐

  1. android studio ndk配置和ndk开发

    配置开发环境: 1:下载ndk,导入android studio中. 2:在项目中引入NDK   3:在计算机path变量中导入NDK路径,在编译.h文件的时候会用到. 一:建立java的native ...

  2. PHP+ExtJS 文件上传示例

    xtJS 4 有一个非常方便的文件上传组件,可以用来将文件上传到服务器.本文PHP教程UncleToo将介绍使用PHP和ExtJS实现文件上传功能. 首先,创建文件上传组件Ext.form.Panel ...

  3. Linux搭建nfs服务器

    使用linux进行嵌入式开发的时候,为了方便开发,通常是将开发板挂载到宿主机的文件系统上,然后将代码放到共享给开发板的目录中,再通过开发板运行. 首先查看是否安装了 nfs 软件包,yum list ...

  4. python之编写登陆接口(第一天)

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 针对此实例写了有二种类型的脚本,略有不同,具体如下: 帐号文件account.txt内容如下: sam 123 david ...

  5. myfocus官方网站已经挂掉,相关下载已经从googlecode转到网盘

    首先说,我跟作者没有任何关系,只是偶然发现这个东西,努力了1个多小时才有下载,现在友情提供出来. 其次,我找到的是v2.0.4 MS这个是最新的版本,更新日期是2012年10月. 再次,本文原本是准备 ...

  6. CSS之float样式总结

    从四大开始开始慢慢接触前端,大概半年多过去了,虽然做了一些东西,但感觉有些点始终不是很清晰.有时候为了赶进度,没有太多时间对某个点进行全面深入思考分析,只能从网上搜一搜,试一试,只要效果出来了,任务就 ...

  7. 精益化设计:把敏捷方法和Lean UX相结合

    敏捷方法已经成为了主流.同时,Kindle和iPhone等设备取得的巨大成功也推动了体验设计的飞速发展.不过,如何把敏捷方法和UX设计结合起来,一直以来都是一个难题.文章将探讨如何把UX融入到最流行的 ...

  8. Welogic中的JMS

    WebLogic JMS 概述 企业消息传递系统使得应用程序能够通过消息的交换与其他系统之间进行通信.消息是包含协调不同应用程序之间通信所需信息的请求.报告和/或事 件.消息提供了提取级别,使您能够从 ...

  9. Don't make a promise when you are in Joy. Don't reply when you are Sad.Don't take decisions when you are Angry.Think Twice.Act Wise.

    Don't make a promise when you are in Joy. Don't reply when you are Sad.Don't take decisions when you ...

  10. iOS开发中设置UITextField的占位文字的颜色,和光标的颜色

    在iOS开发中,对于很多初学者而言,很有可能碰到需要修改UITextField的占位文字的颜色,以及当UITextField成为第一响应者后光标的颜色,那么下面小编就介绍一下修改占位文字和光标的颜色. ...