self.mgr.delegate = self;
// 设置多久获取依次位置
// self.mgr.distanceFilter = 500; // 意思是过500米调用依次
// 设置位置精确度
self.mgr.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
/*
extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation // 最佳导航
extern const CLLocationAccuracy kCLLocationAccuracyBest; 最精准
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; 10米
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters; 100米
extern const CLLocationAccuracy kCLLocationAccuracyKilometer; 1000米
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers; 3000米
*/
/* 注意:ios7只要开始定位,系统就会要求用户对你的应用程序授权,但是从ios8开始,想要定位必须先"自己"主动要求用户授权
在IOS8中不仅仅要自动要求授权,而且要在info.plist文件中配置一项属性才能弹出授权窗口
在Info.plist中加入两个缺省没有的字段设置为IOS8请求授权
NSLocationAlwaysUsageDescription // 允许后台获取GPS描述
NSLocationWhenInUseUsageDescription // 允许前台获取GPS描述
*/
// 判断是否IOS8
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
NSLog(@"IOS8");
// 授权成功,主动通知代理
[self.mgr requestAlwaysAuthorization]; // 请求前台和后台定位权限
// [self.mgr requestWhenInUseAuthorization]; // 请求前台定位权限
}else{
NSLog(@"IOS7");
// 开始监听(开始获取位置)
[self.mgr startUpdatingLocation]; // 位置
// [self.mgr startUpdatingHeading]; // 方向
}
#pragma mark - CLLocationManagerDelegate 代理方法
// 在IOS8的时候靠这个来开始获取位置
// 授权状态发生改变的时候调用
// CLAuthorizationStatus)status : 授权状态
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
/*
用户从未授权
kCLAuthorizationStatusNotDetermined
无法使用定位服务,该状态无法改变
kCLAuthorizationStatusRestricted
用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
kCLAuthorizationStatusDenied
用户允许该程序无论何时都可以使用地理位置
kCLAuthorizationStatusAuthorizedAlways
用户同意程序在可见时使用地理位置
kCLAuthorizationStatusAuthorizedWhenInUse
*/
if (status == kCLAuthorizationStatusNotDetermined ) {
NSLog(@"等待用户授权");
}else if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse )
{
NSLog(@"用户授权成功");
[self.mgr startUpdatingLocation];
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
NSLog(@"%s",__func__);
// 如果只需要获取依次,可以获取到位置之后就停止
// [self.mgr stopUpdatingLocation];
// 1.获取最后一次的位置
CLLocation *location = [locations lastObject];
// 经度,纬度
/*
location.coordinate 坐标,包含经纬度
location.altitude 设备海拔高度
location.course 设置请进方向 0表示北 90东 180南 270西
location.horizontalAccuracy 水平精准度
location.verticalAccuracy 垂直精准度
location.timestamp 定位信息返回时间
location.speed 设备移动速度 单位是米/秒 适用于行车速度,不太适用于步行
*/
NSLog(@"经度-%f,纬度-%f 速度-%f",location.coordinate.longitude,location.coordinate.latitude,location.speed );
}