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 设备工具 === ...
随机推荐
- AT NEW F、AT END OF F注意事项
1.F只能是内表的第一个字段 2.AT NEW F.AT END OF F使用F之后内表内容会变为* 解决出现*的办法: FIELD-SYMBOLS:<ITAB> LIKE ITAB L ...
- ArcGIS中的style样式的使用
MapGIS安装包大小(以M计算)与ArcGIS (以G计算)在数量级存在差异,就可以隐约知道ArcGIS功能的强大.ArcGIS更注重重用(比如符号库.模块等).数据与制图分离(尤其是制图表达最能体 ...
- oracle pfile spfile
1.参数文件的定义.作用 oracle数据库通过一系列参数来对数据库进行配置.这些参数是以键-值对的形式来表 示的,如:MAXLOGFILES=50BACKGROUND_DUMP_DEST=C:DUM ...
- ExtJs中xtype与组件类的对应表
from:http://blog.163.com/jx_dream/blog/static/117056627201223091021410/ 核心提示:我们在使用 ExtJs 创建组件时最容易理解的 ...
- iOS didReceiveMemoryWarning 的处理
当iOS触发didReceiveMemoryWarning这个方法的时候,我们一般会做一些手动处理,强制清理掉一些目前不用的数据.但是这个方法并不只是单纯的通知开发者你的内存已经吃紧了,系统通知你的同 ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Swift之map函数的强大之处
CollectionType Map 在CollectionType的extension中map方法的定义: extension CollectionType { /// Return an `Arr ...
- iOS开发之网络编程--使用NSURLConnection实现文件上传
前言:使用NSURLConnection实现文件上传有点繁琐. 本文并没有介绍使用第三方框架上传文件. 正文: 这里先提供用于编码测试的接口:http://120.25.226.186:3281 ...
- 我体验过的可以用的XCode插件
XCode版本:7.0.1 其实插件的使用,如果能得到直接的xclugin后缀文件,是可以直接放置在隐藏文件夹中: /Users/HeYang/Library/Application Support/ ...
- 用nginx-gridFS读取MongoDB的图片及文件(为什么你老是配不成功?)
最近在部署公司服务器的nginx + mongodb + gridfs环境: 搜索了N多文档,基本上都一样,期间遇到很多问题: 下面是整理的一份搭建文档: 摘要 nginx-gridfs是一个ngin ...