CoreLocation(一)
来源:互联网 发布:网络授权书尺寸 编辑:程序博客网 时间:2024/05/16 05:52
CoreLocation
简介:
CoreLocation框架主要用于实现地理定位等相关功能,需要初步掌握CoreLocation框架,我们需要先了解以下几个类:
CLLocationManager(定位管理器),
CLLocation(定位信息),
CLLocationCoordinate2D(地理坐标)。
下面开始正式介绍CoreLocation框架的使用。
1.区别:
在了解如何使用之前,需要了解在iOS7和iOS8下的一点区别,基于更好的用户体验以及安全性等考虑,在iOS8之后,如果应用需要使用地图定位功能,需要向用户申请授权。
判断当前运行的系统版本,如果大于8.0则请求用户权限,iOS7不需要这一步操作
if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) { // 此处的Manager为CoreLocationManager对象,下文介绍 [self.manager requestWhenInUseAuthorization];}
你也可以使用这个方法来申请授权,两者的区别很明显,WhenInUse表示当使用时应用正在使用时才需要进行定位服务,Always表示当应用进入后台时也一直进行定位,根据需求使用即可。
- (void)requestAlwaysAuthorization
做了这一步之后,可能你还是看不到弹框提醒,那是因为如果想要进行这一步操作,还需要在info.plist中进行一项配置,先看一段文档:
If the NSLocationWhenInUseUsageDescription key is not specified in your Info.plist, this method will do nothing, as your app will be assumed not to support WhenInUse authorization.
意思很简单,也就是说我们需要在info.plist文件中为
NSLocationWhenInUseUsageDescription这个key配置一个value,你所配置的value就是弹框时的提示信息。
当然,还有与Always权限对应的另一个key
NSLocationAlwaysUsageDescription。
在iOS7系统下,默认直接获取授权,如果你也想对用户进行提示,那么也需要配置info.plist中的一个key
Privacy - Location Usage Description,此处设置value的就是提示信息。
2.使用前提
如果用户点击allow允许使用授权服务,那么一切正常,如果此时用户点击了don’t allow,那么就算你再次运行程序,系统也不会再次弹框提醒用户授权,也就是说,提示只有一次!
那么假如用户选择了don’t allow,我们还是希望使用定位该怎么办?
介绍一个CLLocationManagerDelegate的方法,当开始定位时检测到用户没有授权等错误时,会执行这个代理方法
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { if (error.code == kCLErrorDenied) { // 让用户前往设置打开定位服务授权 }}
还有一种情况需要进行考虑,有时候我们会关闭定位服务,此时最好在想使用定位服务时进行判断:
if (![CLLocationManager locationServicesEnabled]) { // 定位服务不可用,提示用户进入设置菜单手动开启定位服务}
注意区分上面两个情况,第一种是开启了定位服务但是用户拒绝为应用授权,第二种是彻底没有开启定位。
3.开始使用
进行了以上的设置,我们可以正式开始使用CoreLocation来进行定位服务了。
先介绍第一个类
CoreLocationManager:
顾名思义,该类主要用于管理定位服务,其实上文中已经用到了这个类的两个方法:
// 判断是否开启定位服务+ (BOOL)locationServicesEnabled;// 申请授权- (void)requestWhenInUseAuthorization ;
当进行了权限的判断之后,如果确定已经开启了定位服务并且获取了授权,那么可以开始定位:
- (void)startUpdatingLocation;
此时,创建的CLLocationManager对象会开始调用它的代理的
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
locations数组中包括了若干CLLocation对象,每一个CLLocation对象代表一个位置信息,最新的位置信息位于数组的最后。
下一篇将会着重介绍CLLocation以及CLLocationManager的使用。
- CoreLocation(一)
- MapKit/CoreLocation使用(一)
- CoreLocation
- CoreLocation
- CoreLocation
- coreLocation
- (七十五)CoreLocation(一)在iOS7和iOS8设备上获取授权
- iOS9下有关CoreLocation学习一
- iOS学习笔记 地图(一)定位CoreLocation
- MapKit/CoreLocation使用(二)
- CoreLocation框架地图定位(iOS9全适配)
- 使用CoreLocation进行定位(Swift版)
- 地图---CoreLocation框架(学习笔记)
- CoreLocation进行定位(Swift版)
- iOS学习笔记19-地图(一)定位CoreLocation
- iPhone获取当前位置(CoreLocation的一些简单使用)
- iOS CoreLocation使用(iOS8 回调不行的问题解决)
- 实用知识:CoreLocation的使用(位置获取)
- thinkphp 更新数据时如果未修改数据,返回结果判断错误
- Android SDK 201508可用的镜像下载
- Dubbo架构设计详解
- 认证中心公钥(CA)与IC卡参数
- Path Sum
- CoreLocation(一)
- UI设计中的结构设计
- html5开发之viewport使用
- Java中的String类以及 == 和equals()方法的比较!
- android <xliff:g> 疑惑
- 包养包养枯干权顶替仍有仍
- 论交互式设计与用户的关系
- Regionals 2009 >> Asia - Hsinchu UVALIVE, 4528 Schedule Pairs of Jobs - 搜索回溯
- 如何创建Java中的线程池