一、CoreLocation在程序应用开发中使用
1、简介
CoreLocation是iOS SDK中一个提供设备位置的框架,可以使用三种技术来获取位置:GPS、蜂窝或WiFi。在这些技术中,GPS最为精准,如果有GPS硬件,CoreLocation将优先使用它。如果设备没有GPS硬件(如WiFi iPad)或使用GPS获取当前位置时失败,CoreLocation将退而求其次,选择使用蜂窝或WiFi。
2、CoreLocation框架的使用
CoreLocation的大多数功能是由位置管理器(CLLocationManager)提供的,可以使用位置管理器来指定位置更新的频率和精度,以及开始和停止接收这些更新。
(1)导入框架
在Xcode中的Gernal选项选择Frameworks条目,添加CoreLocation框架
(2)导入头文件
import <CoreLocation/CoreLocation.h>
(3)创建定位管理器CLLocationManager并对其进行初始化,以及相关属性的配置
CLLocationManager的常用操作和属性
开始用户定位- (void)startUpdatingLocation;
停止用户定位- (void) stopUpdatingLocation;
说明:当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法
- (void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )locations;
每隔多少米定位一次
@property(assign, nonatomic) CLLocationDistance distanceFilter;
定位精确度(越精确就越耗电)
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
//创建定位管理器
CLLocationManager * locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
/*
extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0); //导航定位
extern const CLLocationAccuracy kCLLocationAccuracyBest; //比较精准的定位
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; //精确度10米以内
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
*/
//定位的精确度,精确度越高越耗电
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//定位的更新频率,单位为米
locationManager.distanceFilter = 5;
(4)打开服务器并开启定位
iOS8.0之后开启定位需要执行requestAlwaysAuthorization/requestWhenInUseAuthorization,而且还要配置info.plist。NSLocationAlwaysUsageDescription / NSLocationWhenInUseUsageDescription
//判断定位服务是否打开
if (![CLLocationManager locationServicesEnabled]) {
NSLog(@"提示用户打开定位服务");
} else {
//获取当前定位的状态
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
//如果定位状态为未打开
if (status == kCLAuthorizationStatusNotDetermined) {
//requestWhenInUseAuthorization 前端定位
//requestAlwaysAuthorization 前端和后台定位
[self.manager requestWhenInUseAuthorization];
//[self.manager requestAlwaysAuthorization];
}
//开启定位
[self.manager startUpdatingLocation];
}
(5)定位信息类CLLocation
CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等
(1)经纬度
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
(2)海拔
@property(readonly, nonatomic) CLLocationDistance altitude;
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray<CLLocation *> *)locations {
//当定位成功后,这个代理只需执行一次,所有停止位置更新
[manager stopUpdatingLocation];
//获取定位信息
CLLocation * location = [locations lastObject];
//获取经纬度
CLLocationCoordinate2D coordinate = location.coordinate;
NSLog(@"经度为:%f,纬度为:%f",coordinate.longitude,coordinate.latitude);
(6)调试
因为不是真机,模拟器在运行的时候,可以自定义的设置其自身所在的位置