iOS - CoreLocation 定位
前言
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)来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。同时,在应用程序中需要根据配置对requestAlwaysAuthorization或requestWhenInUseAuthorization方法进行请求。
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 定位的更多相关文章
- iOS开发拓展篇—CoreLocation定位服务
iOS开发拓展篇—CoreLocation定位服务 一.简单说明 1.CLLocationManager CLLocationManager的常用操作和属性 开始用户定位- (void)startUp ...
- iOS地图 -- 定位初使用
iOS的定位服务用到的框架是#import <CoreLocation/CoreLocation.h> 定位中用到的类是CLLocationManager 一.iOS8.0之前的定位 向用 ...
- iOS8中使用CoreLocation定位[转]
本文转自:http://blog.devzeng.com/blog/ios8-corelocation-framework.html iOS8以前使用CoreLocation定位 1.首先定义一个全局 ...
- iOS后台定位实现
iOS后台定位实现 (2013-01-24 16:43:12) 工作中碰到一个定位的应用场景:app需要在后台运行,实时上传用户地理位置. 苹果对iOS的规范性在提升了app的品质的同时也 ...
- iOS-----使用CoreLocation定位
使用CoreLocation定位 CoreLocation框架 (CoreLocation.framework)可用于定位设备当前经纬度, 通过该框架, 应用程序可通过附近的蜂窝基站\WIFI信号 或 ...
- iOS | 地图定位
在IOS开发中,最常见的功能之一就是地图定位功能,不单单是百度地图,高德地图等专业的地图导航软件,还有美团,咕咚等一些美食购物类和运动类也需要这样的功能,所以学会这项技能是一名IOS开发工程师必须的. ...
- iOS 后台定位被拒注意事项
iOS 后台定位被拒的原因很简单就是没有达到苹果对后台定位的要求. 本地要求: 1.在plist文件中添加字段 "Privacy - Location Always Usage Descri ...
- iOS CLLocationManager定位
本文转载至 http://www.tuicool.com/articles/7JBRZn 在iOS8以前的版本中,我们使用CLLocationManager定位是没有问题的,最近在iOS8系统中却无法 ...
- IOS CoreLocation框架的使用(用于地理定位)
● 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 ● 导航:去任意陌生的地方 ● 周边:找餐馆.找酒店.找银行.找电影院 ● 在上述应用中,都用到了地图和定位功能,在iOS开发中 ...
随机推荐
- CentOS 7 启动、重启、chkconfig等命令已经合并为systemctl
CentOS 7系统服务启动.重启.设置服务启动项命令以合并为,systemctl . 现在用service 或/etc/init.d/命令,重启,重新启动,停止等没效果,因为命令合并为systemc ...
- linux下flash的安装
linux的初学者可能会遇到各种各样的问题,其中的问题就有一个,linux下的flash插件怎么安装呢? 首先前往flash官网下载好对应的文件,然后提取里面的一个叫做 libflashplayer. ...
- 获取浏览器信息 c#
Request.Browser.MajorVersion.ToString();//获取客户端浏览器的版本号 Request.Browser.Version.ToString();//获取客户端浏览器 ...
- rdesktop共享剪贴板的问题
使用-r clipboard:PRIMARYCLIPBOARD参数来共享剪贴板,连接到window7 但有时就不好用了,剪贴板没有同步 找到一些相关的资料 https://bugs.launchpad ...
- [原] MSSQL MDF文件太大问题
USE 你的库名; GO -- 数据库空间使用情况 EXEC sp_spaceused; -- 查下文件空间使用情况 SELECT file_id, name, [文件大小(MB)] = size / ...
- [译]Dynamics AX 2012 R2 BI系列-规划分析的注意事项
https://msdn.microsoft.com/en-us/library/gg731898.aspx 在开始实施AX的分析特性前,有很多事情要考虑.本文描述了你必须考虑的事情,和在 ...
- mac_snailSVN
作者:潘捷链接:https://www.zhihu.com/question/19705164/answer/119484169来源:知乎著作权归作者所有,转载请联系作者获得授权. Mac下之前也有类 ...
- hadoop多硬盘配置注意点
[一].实验环境 1.1.环境 hadoop 2.6.0 namenode 2个 各增加 2个1T硬盘 datanode 3个 各增加3个1T硬盘 1.2.挂载硬盘 fdisk 分区 ( ...
- Hibernate5.1.0的hello word
新建一个JavaProject(不一定非要web工程) 在工程里面新建一个文件夹lib,用来存放jar包 找到Hibernate的下载文件,解压后找到required文件夹,这是需要的jar包 添加到 ...
- java编程实现日历
package com.beiwo.other;/* * 需求:输入一个年份和月份 ,显示当前月日情况 ,星期数要对应准确 * 1.1900年1月1号开始 * 2.星期 : 直接用总天数对7求余数 3 ...