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) {    // 此处的ManagerCoreLocationManager对象,下文介绍        [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的使用。

0 0
原创粉丝点击