美文网首页
CLLocationManager

CLLocationManager

作者: 12d049d93c23 | 来源:发表于2016-03-08 08:54 被阅读485次

1、定位 使用CoreLocation框架

2、IOS8、IOS9之后的改变

IOS8之后添加的功能 

(1)定位服务(有两种状态1、一直使用定位  2、当使用APP的时候使用定位)

《1》NSLocationAlwaysUsageDescription

《2》NSLocationWhenInUseUsageDescription(在Info.plist文件的最后一项添加 如果忘记写 就不能使用定位功能,并且也不提醒)

2、请求用户授权

《1》requestAlwaysAuthorization

《2》requestWhenInUseAuthorization(如果和描述的目的不匹配,也不能使用定位功能)

IOS9之后的改变:按Home键进入后台 如果需要继续定位

《1》在info.plist添加Required background modes->App registers for location updates如果不添加这对键值却使用后台定位功能会直接奔溃

《2》allowsBackgroundLocationUpdates属性需要设置成YES

主要分为六个步骤:

//《0》判断用户是否在设置中打开了定位服务功能

if(![CLLocationManagerlocationServicesEnabled]) {

//NSLog(@"用户打开了位置服务功能");

/*

//1、跳弹出框提示用户打开步骤

UIAlertController *alerController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"请在设置中打开定位服务功能" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction*alerAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

}];

[alerController addAction:alerAction];

[self presentViewController:alerController animated:YES completion:nil];

*/

//2、通过代码跳到设置页面

//openURL:可以用于跳转APP,也可以跳到IOS允许跳到的页面

//[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

//判断可不可以打开设置页面

if([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:UIApplicationOpenSettingsURLString]]) {

[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:UIApplicationOpenSettingsURLString]];

}

}

//1、创建一个定位管理者的对象

locationmanager= [[CLLocationManageralloc]init];

//设置多少米去更新定位信息

locationmanager.distanceFilter=100;

//设置定位的精准度

locationmanager.desiredAccuracy=10;

//2、info中添加描述使用定位的目的,并向用户申请授权

[locationmanagerrequestAlwaysAuthorization];

//3、挂上代理并实现代理方法

 locationmanager.delegate = self;

//4、是否使用后台定位的功能

locationmanager.allowsBackgroundLocationUpdates = YES;

//5、开始定位

[ locationmanager startUpdatingLocation];

}

代理方法:

- (void)locationManager:(CLLocationManager*)manager

didUpdateLocations:(NSArray *)locations{

// CLLocation常用属性

// coordinate(当前位置所在的经纬度)

// altitude(海拔)

// speed(当前速度)

// course (航向)

// -distanceFromLocation(获取两个位置之间的直线物理距离)

CLLocation*location = [locations lastObject];

// 1.获取偏向角度

NSString*angleStr =nil;

switch((int)location.course/90) {

case0:

angleStr =@"北偏东";

break;

case1:

angleStr =@"东偏南";

break;

case2:

angleStr =@"南偏西";

break;

case3:

angleStr =@"西偏北";

break;

default:

angleStr =@"未知位置";

break;

}

NSLog(@"航向%@",angleStr);

}

- (void)locationManager:(CLLocationManager*)manager

didFailWithError:(NSError*)error{

NSLog(@"定位失败");

NSLog(@"%@",error);

}

相关文章

网友评论

      本文标题:CLLocationManager

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