IOS定位服务的应用
IOS定位服务的应用
一、授权的申请与设置
在IOS8之后,IOS的定位服务做了优化,若要使用定位服务,必须先获取用户的授权。
首先需要在info.plist文件中添加一个键:NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription。其中NSLocationAlwaysUsageDescription是要始终使用定位服务,NSLocationWhenInUseUsageDescription是只在前台使用定位服务。

IOS8中CLLocationManager新增的两个新方法:
- (void)requestAlwaysAuthorization;
- (void)requestWhenInUseAuthorization;
这两个方法对应上面的两个键值,用于在代码中申请定位服务权限。
二、定位服务相关方法
IOS的定位服务在CoreLocation.framework框架内,首先引入这个框架:

开启定位服务的代码非常简单,示例如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#import "ViewController.h"#import <CoreLocation/CoreLocation.h>@interface ViewController ()<CLLocationManagerDelegate>//定位服务的代理@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; CLLocationManager* manager = [[CLLocationManager alloc]init];//初始化一个定位管理对象 [manager requestWhenInUseAuthorization];//申请定位服务权限 manager.delegate=self;//设置代理 [manager startUpdatingLocation];//开启定位服务}//定位位置改变后调用的函数-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ NSLog(@"%@",locations);}@end |
CLLocationManager相关方法解读:
+ (BOOL)locationServicesEnabled;
判断设备是否支持定位服务
+ (BOOL)headingAvailable;
判断设备是否支持航向信息功能(海拔,速度,方向等传感器的支持)
+ (BOOL)significantLocationChangeMonitoringAvailable;
判断设备是否支持更新位置信息
+ (BOOL)isMonitoringAvailableForClass:(Class)regionClass;
判断设备是否支持区域检测,regionClass是地图框架中的类。
+ (BOOL)isRangingAvailabl;
判断设备是否支持蓝牙测距
+ (CLAuthorizationStatus)authorizationStatus;
获得定位服务的授权状态,CLAuthorizationStatus的枚举如下:
|
1
2
3
4
5
6
7
|
typedef NS_ENUM(int, CLAuthorizationStatus) { kCLAuthorizationStatusNotDetermined = 0,//用户还没有做选择 kCLAuthorizationStatusRestricted,//应用拒接使用定位服务 kCLAuthorizationStatusDenied,//用户拒绝授权 kCLAuthorizationStatusAuthorizedAlways,//8.0后可用,始终授权位置服务 kCLAuthorizationStatusAuthorizedWhenInUse,//8.0后可用,只在前台授权位置服务}; |
@property(assign, nonatomic) CLActivityType activityType;
这个属性用来设置位置更新的模式,枚举如下:
|
1
2
3
4
5
6
|
typedef NS_ENUM(NSInteger, CLActivityType) { CLActivityTypeOther = 1,//未知模式,默认为此 CLActivityTypeAutomotiveNavigation, //车辆导航模式 CLActivityTypeFitness, //行人模式 CLActivityTypeOtherNavigation //其他交通工具模式}; |
模式的应用可以起到节省电量的作用,例如车辆导航模式,当汽车停止时,位置更新服务会暂停。
@property(assign, nonatomic) CLLocationDistance distanceFilter;
设置位置更新的敏感范围,单位为米。
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
设置定位服务的精确度,系统定义好的几个参数如下:
kCLLocationAccuracyBestForNavigation;//导航最高精确
kCLLocationAccuracyBest;//高精确
kCLLocationAccuracyNearestTenMeters;//10米
kCLLocationAccuracyHundredMeters;//百米
kCLLocationAccuracyKilometer;//千米
kCLLocationAccuracyThreeKilometers;//三公里
@property(assign, nonatomic) BOOL pausesLocationUpdatesAutomatically;
设置位置更新是否自动暂停
@property(readonly, nonatomic, copy) CLLocation *location;
最后一次更新的位置信息,只读属性
@property(assign, nonatomic) CLLocationDegrees headingFilter;
相关航向更新的敏感范围
@property(assign, nonatomic) CLDeviceOrientation headingOrientation;
定位航向时的参照方向默认为正北,枚举如下:
|
1
2
3
4
5
6
7
8
9
|
typedef NS_ENUM(int, CLDeviceOrientation) { CLDeviceOrientationUnknown = 0,//方向未知 CLDeviceOrientationPortrait,//纵向模式 CLDeviceOrientationPortraitUpsideDown,//纵向倒置模式 CLDeviceOrientationLandscapeLeft,//左向横向模式 CLDeviceOrientationLandscapeRight,//右向横向模式 CLDeviceOrientationFaceUp,//水平屏幕向上模式 CLDeviceOrientationFaceDown//水平屏幕下模式}; |
@property(readonly, nonatomic, copy) CLHeading *heading;
最后一个定位得到的航向信息
- (void)startUpdatingLocation;
开启定位服务
- (void)stopUpdatingLocation;
停止定位服务
- (void)startUpdatingHeading;
开启航向地理信息服务
- (void)stopUpdatingHeading;
停止航向地理信息服务
三、定位服务代理的相关方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
位置更新后调用的方法,数组中是所有定位到的位置信息,最后一个是最新的。
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading;
航向信息更新后调用的方法
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error;
定位异常时调用的方法
四、定位服务获取到的位置对象
上面也提到,定位后返回的数组中存放的都是CLLocation对象,这里面有很详细的位置信息,属性如下:
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
经纬度属性,CLLocationCoordinate2D是一个结构体,如下:
|
1
2
3
4
|
typedef struct { CLLocationDegrees latitude;//纬度 CLLocationDegrees longitude;//经度} CLLocationCoordinate2D; |
@property(readonly, nonatomic) CLLocationDistance altitude;
海拔高度,浮点型
@property(readonly, nonatomic) CLLocationAccuracy horizontalAccuracy;
水平方向的容错半径
@property(readonly, nonatomic) CLLocationAccuracy verticalAccuracy;
竖直方向的容错半径
@property(readonly, nonatomic) CLLocationDirection course;
设备前进的方向,取值范围为0-359.9,相对正北方向
@property(readonly, nonatomic) CLLocationSpeed speed;
速度,单位为m/s
@property(readonly, nonatomic, copy) NSDate *timestamp;
定位时的时间戳
五、航标定位得到的航标信息对象
CLHeading对象的属性信息:
@property(readonly, nonatomic) CLLocationDirection magneticHeading;
设备朝向航标方向,0为北磁极。
@property(readonly, nonatomic) CLLocationDirection trueHeading;
设备朝向真实方向,0被地理上的北极
@property(readonly, nonatomic) CLLocationDirection headingAccuracy;
方向偏差
@property(readonly, nonatomic) CLHeadingComponentValue x;
x轴的方向值
@property(readonly, nonatomic) CLHeadingComponentValue y;
y轴方向值
@property(readonly, nonatomic) CLHeadingComponentValue z;
z轴方向值
@property(readonly, nonatomic, copy) NSDate *timestamp;
方向定位时间戳
IOS定位服务的应用的更多相关文章
- iOS定位服务编程详解
现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 i ...
- iOS 定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等授权检测
金田 iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Cras ...
- IOS 定位服务与地图的应用开发
1.定位服务 现在的移动设备很多都提供定位服务,IOS设备提供3种不同定位途径: (1)WiFi定位,通过查询一个WiFi路由器的地理位置的信息,比较省电:IPhone,IPod touch和IPad ...
- iOS定位服务CoreLocation
欢迎訪问我的新博客: 开发人员说 基于LBS的应用开发是当今移动开发中的一大热门, 当中主要涉及到地图和定位两个方面. iOS开发中, 定位服务依赖于CoreLocation框架, CLLocatio ...
- 简易的IOS位置定位服务
有时一些小的需求,其实只是需要得知当前IOS APP使用的地点,有些只是想精确到城市级别,并不需要任何地图. 有了以下的简易实现: @interface MainViewController ()&l ...
- iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等(转)
转载自:http://www.cocoachina.com/ios/20151214/14502.html iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用 ...
- iOS开发拓展篇—CoreLocation定位服务
iOS开发拓展篇—CoreLocation定位服务 一.简单说明 1.CLLocationManager CLLocationManager的常用操作和属性 开始用户定位- (void)startUp ...
- 【转】iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等
iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Crash. ...
- 【iOS】7.4 定位服务->2.1.1 定位 - 官方框架CoreLocation: 请求用户授权
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...
随机推荐
- css权重是什么
css权重是什么? 概述 css Specificity中文一般译为css优先级.css权重.相比"权重","优先级"更好理解,mozilla官方中文文档就翻译 ...
- JavaScript hasOwnProperty() 函数详解
hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性.如果有,返回true,否则返回false. 该方法属于Object对象,由于所有的对象都"继承 ...
- ABAP:区别CALL SCREEN/SET SCREEN/LEAVE TO SCREEN
1,CALL SCREEN XXXX将在Screen调用栈(CALL STACK)上面添加一层调用(进栈),调用XXXX的PBO和PAI,如果XXXX的Next Screen不为0,那么将继续其Nex ...
- NSFileManager文件操作的十个小功能
NSFileManager文件操作的十个小功能 NSFileManager是一个单列类,也是一个文件管理器.可以通过NSFileManager创建文件夹.创建文件.写文件.读文件内容等等基本功能. 下 ...
- iOS之UI--主流框架的搭建--仿制QQ的UI框架
使用XCode搭建多个控制器界面,一般在实际开发中建议超过四个控制器界面使用纯代码. 下面的实例其实已经超过了四个,总结详细步骤的目的,主要是更熟悉XCode的StoryBoard使用细节. 先直接上 ...
- (第五章)java面向对象之this的作用总结
this关键字总是指向调用该方法的对象. this可以代表任何对象,当this出现在某个方法体中时,它所代表的对象是不确定的,但它的类型是确定的,它所代表的对象只能是当前类的(在那个类中就是那个类), ...
- windows log 打印语句
1.格式化字符串(Writes formatted data to the specified string) wchar_t szMessage[260]; PWSTR pszFunction = ...
- javascript之工厂方式定义对象
每一个函数对象都有一个length属性,表示该函数期望接收的参数个数. <html> <head> <script type="text/javascript& ...
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...
- Profile 分析 Erlang 虚拟机源码时要注意的一个问题
最近用 Intel Vtune 剖析 Erlang 虚拟机的运行,想看看那些函数和语句耗时最多,遇到一个小问题,那就是 Vtune 给出的源码和汇编码对应有问题.这个问题在 profile 或 deb ...