美文网首页
CoreLocation(地理定位)的基本使用

CoreLocation(地理定位)的基本使用

作者: 温暖C | 来源:发表于2016-06-11 16:31 被阅读73次

一、CoreLocation框架使用前提

  1. 导入主头文件
    #import <CoreLocation/CoreLocation.h>
    注意:CoreLocation框架中所有数据类型的前缀都是CL;CoreLocation中使用CLLocationManager对象来做用户定位。

二、CoreLocation框架使用流程

  1. 创建CoreLocation管理者

     CLLocationManager *manager = [[CLLocationManager alloc] init];
    

注意:创建CoreLocation管理者要变成属性,使用强引用,因为viewDidLoad方法执行完毕,CLLocationManager是个局部变量,会被销毁。

  1. 成为CoreLocationManager的代理,监听获取到的位置

     manager.delegate = self;
    
  2. 主动要求用户对应用程序授权
    在iOS8以前,只有开始定位,系统就会自动要求用户对你的应用程序授权。从iOS8开始,想要定位,必须先主动要求用户授权,而且必须在info.plist文件中配置一项属性才能弹出允许授权的窗口。

  • requestWhenInUseAuthorization:请求前台的定位权限
  • requestAlwaysAuthorization:请求前台和后台的定位权限cc
  • NSLocationWhenInUseDescription:允许在前台获取GPS的描述
  • NSLocationAlwaysUsageDescription:允许在后台获取GPS的描述

开发者可以在Info.plist中设置NSLocationUsageDescription说明定位的目的(Privacy -
Location Usage Description)。一旦用户选择了“Don’tAllow”,意味着你的应用无法使用定位功能,为了严谨起见,最好在使用定位功能之前判断当前应用的定位功能是否可用。CLLocationManager有个类方法可以判断当前应用的定位功能是否可用:

    + (BOOL)locationServicesEnabled;
  1. 开始监听(开始获取位置)
    调用[self.manager startUpdatingLocation],当调用了startUpdatingLocation方法,就开始不断地定位用户的位置,中途会频繁地调用下面的代理方法:- (void)locationManager:(CLLocationManager)manager didUpdateLocations:(NSArray)locations;

  2. 实现CLLocationManager的代理方法
    (1)当授权状态发生改变时调用:

- (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
if(status ==kCLAuthorizationStatusNotDetermined) {
NSLog(@"等待用户授权");
}else if(status ==kCLAuthorizationStatusAuthorizedAlways||
status ==kCLAuthorizationStatusAuthorizedWhenInUse)
{
NSLog(@"授权成功");
//开始定位
[self.mgr startUpdatingLocation];
}else
{
NSLog(@"授权失败");
}
}

CLAuthorizationStatus枚举类型:

  • 用户从未选择过权限:kCLAuthorizationStatusNotDetermined
  • 无法使用定位服务,该状态用户无法改变:kCLAuthorizationStatusRestricted
  • 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态:kCLAuthorizationStatusDenied
  • 已经授权(废弃):kCLAuthorizationStatusAuthorized
  • 用户允许该程序无论何时都可以使用地理信息:kCLAuthorizationStatusAuthorizedAlways
  • 用户同意程序在可见时使用地理位置:kCLAuthorizationStatusAuthorizedWhenInUse

(2)当获取到位置信息之后会调用:

- (void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray*)locations {
  //如果只需要获取一次,可以获取到位置之后就停止
  [self.mgr stopUpdatingLocation];
}

在该代理方法中,还可以获取以下信息:

  • location.coordinate:坐标,包含经纬度
  • location.altitude:设备海拔高度单位是米
  • location.course:设置前进方向
  • location.horizontalAccuracy:水平精准度
  • location.verticalAccuracy:垂直精准度
  • location.timestamp:定位信息返回的时间
  • location.speed:设备移动速度单位是米/秒,适用于行车速度而不太适用于不行

6.报错处理
使用CoreLocation获取地理位置信息,报错:
Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"
解决方法:

  • 确定模拟器或者手机已经联网并且允许应用程序获取地理位置
  • 重置地理位置服务或者网络服务
    ps:如果是模拟器就果断直接重置模拟器吧 IOS Simulator - Reset Content and Settings...

相关文章

  • coreLocation&mapKit的使用小结

    一、corelocation(核心定位)基本使用 1.主要作用:定位、区域判断、地理编码 2.主要使用的类 2....

  • Map地图

    MapKit:用于地图展示 CoreLocation:用于地理定位 CoreLocation框架的使用 CLLoc...

  • CoreLocation(地理定位)的基本使用

    一、CoreLocation框架使用前提 导入主头文件#import

  • 地图(一)之CoreLocation

    CoreLocation CoreLocation用于地理定位,地理编码区域监听等(着重功能实现) 1.获取定位授...

  • IOS系统定位

    一、介绍 1、定位使用CoreLocation框架 2、功能 (1)、基础定位 (2)、地理编码 与反编...

  • 定位功能

    01-iOSCoreLocation框架的基本使用——定位 基本大纲 01-CoreLocation框架的基本使用...

  • 对 'CoreLocation' say so

    应用场景 定位 地图CoreLocation : 用于地理定位, 地理编码, 区域监听等(着重功能实现)MapKi...

  • ios地图定位大头针

    corelocation框架用于地理定位 mapkit框架用于地图展示 corelocation框架中所有数据类型...

  • iOS定位(LBS)

    CoreLocation 地理定位 1.创建定位管理者 CLLocationManager *mgr = [[CL...

  • 学习 ios地图相关记录(壹 只有一)

    前言 现在很多 APP 都有 定位 和 地图 依赖 : CoreLocation(功能实现) 定位 地理定...

网友评论

      本文标题:CoreLocation(地理定位)的基本使用

      本文链接:https://www.haomeiwen.com/subject/qcfedttx.html